DrawString implementation
[mono.git] / mcs / class / System.Drawing / System.Drawing / Color.cs
1 //\r
2 // System.Drawing.Color.cs\r
3 //\r
4 // Authors:\r
5 //      Dennis Hayes (dennish@raytek.com)\r
6 //      Ben Houston  (ben@exocortex.org)\r
7 //      Gonzalo Paniagua (gonzalo@ximian.com)\r
8 //\r
9 // (C) 2002 Dennis Hayes\r
10 // (c) 2002 Ximian, Inc. (http://www.ximiam.com)\r
11 //\r
12 // TODO: Are the static/non static functions declared correctly\r
13 \r
14 using System;\r
15 using System.Collections;\r
16 using System.ComponentModel;\r
17 using System.Reflection;\r
18 \r
19 namespace System.Drawing \r
20 {\r
21         [TypeConverter(typeof(ColorConverter))]\r
22         [Serializable]\r
23         public struct Color\r
24         {\r
25                 private static Hashtable namedColors;\r
26                 private static Hashtable systemColors;\r
27                 // Private transparancy (A) and R,G,B fields.\r
28                 byte a;\r
29                 byte r;\r
30                 byte g;\r
31                 byte b;\r
32                 private static string creatingColorNames = "creatingColorNames";\r
33 \r
34                 // The specs also indicate that all three of these propities are true\r
35                 // if created with FromKnownColor or FromNamedColor, false otherwise (FromARGB).\r
36                 // Per Microsoft and ECMA specs these varibles are set by which constructor is used, not by their values.\r
37                 bool isknowncolor;\r
38                 bool isnamedcolor;\r
39                 bool issystemcolor;\r
40                 KnownColor knownColor;\r
41 \r
42                 string myname;\r
43 \r
44                 public string Name {\r
45                         get{\r
46                                 return myname;\r
47                         }\r
48                 }\r
49 \r
50                 public bool IsKnownColor {\r
51                         get{\r
52                                 return isknowncolor;\r
53                         }\r
54                 }\r
55 \r
56                 public bool IsSystemColor {\r
57                         get{\r
58                                 return issystemcolor;\r
59                         }\r
60                 }\r
61 \r
62                 public bool IsNamedColor {\r
63                         get{\r
64                                 if (!isnamedcolor)\r
65                                         return IsKnownColor;\r
66                                 return isnamedcolor;\r
67                         }\r
68                 }\r
69 \r
70 \r
71                 public static Color FromArgb (int red, int green, int blue)\r
72                 {\r
73                         return FromArgb (255, red, green, blue);\r
74                 }\r
75                 \r
76                 public static Color FromArgb (int alpha, int red, int green, int blue)\r
77                 {\r
78                         CheckARGBValues (alpha, red, green, blue);\r
79                         Color color = new Color ();\r
80                         color.a = (byte) alpha;\r
81                         color.r = (byte) red;\r
82                         color.g = (byte) green;\r
83                         color.b = (byte) blue;\r
84                         color.myname = String.Empty;\r
85                         return color;\r
86                 }\r
87 \r
88                 private static Color FromArgbNamed (int alpha, int red, int green, int blue, string name)\r
89                 {\r
90                         Color color = FromArgb (alpha, red, green, blue);\r
91                         color.isknowncolor = true;\r
92                         color.isnamedcolor = true;\r
93                         //color.issystemcolor = false; //???\r
94                         color.myname = name;\r
95                         color.knownColor = (KnownColor) Enum.Parse (typeof (KnownColor), name, false);\r
96                         return color;\r
97                 }\r
98 \r
99                 internal static Color FromArgbSystem (int alpha, int red, int green, int blue, string name)\r
100                 {\r
101                         Color color = FromArgbNamed (alpha, red, green, blue, name);\r
102                         color.issystemcolor = true;\r
103                         return color;\r
104                 }\r
105 \r
106                 public int ToArgb()\r
107                 {\r
108                         return a << 24 | r << 16 | g << 8 | b;\r
109                 } \r
110 \r
111                 public static Color FromArgb (int alpha, Color baseColor)\r
112                 {\r
113                         return FromArgb (alpha, baseColor.r, baseColor.g, baseColor.b);\r
114                 }\r
115 \r
116                 public static Color FromArgb (int argb)\r
117                 {\r
118                         return FromArgb (argb >> 24, (argb >> 16) & 0x0FF, (argb >> 8) & 0x0FF, argb & 0x0FF);\r
119                 }\r
120 \r
121                 public static Color FromKnownColor (KnownColor knownColorToConvert)\r
122                 {\r
123                         Color c = FromName (knownColorToConvert.ToString ());\r
124                         c.knownColor = knownColorToConvert;\r
125                         return c;\r
126                 }\r
127 \r
128                 private static Hashtable GetColorHashtableFromType (Type type)\r
129                 {\r
130                         Hashtable colorHash = new Hashtable (CaseInsensitiveHashCodeProvider.Default,\r
131                                                              CaseInsensitiveComparer.Default);\r
132 \r
133                         PropertyInfo [] props = type.GetProperties ();\r
134                         foreach (PropertyInfo prop in props){\r
135                                 if (prop.PropertyType != typeof (Color))\r
136                                         continue;\r
137 \r
138                                 MethodInfo getget = prop.GetGetMethod ();\r
139                                 if (getget == null || getget.IsStatic == false)\r
140                                         continue;\r
141 \r
142                                 colorHash.Add (prop.Name, prop.GetValue (null, null));\r
143                         }\r
144                         return colorHash;\r
145                 }\r
146 \r
147                 private static void FillColorNames ()\r
148                 {\r
149                         if (systemColors != null)\r
150                                 return;\r
151 \r
152                         lock (creatingColorNames) {\r
153                                 if (systemColors != null)\r
154                                         return;\r
155                                 \r
156                                 Hashtable colorHash = GetColorHashtableFromType (typeof (Color));\r
157                                 namedColors = colorHash;\r
158 \r
159                                 colorHash = GetColorHashtableFromType (typeof (SystemColors));\r
160                                 systemColors = colorHash;\r
161                         }\r
162                 }\r
163                 \r
164                 public static Color FromName (string colorName)\r
165                 {\r
166                         object c = NamedColors [colorName];\r
167                         if (c == null) {\r
168                                 c = SystemColors [colorName];\r
169                                 if (c == null) {\r
170                                         // This is what it returns!\r
171                                         Color d = FromArgb (0, 0, 0, 0);\r
172                                         d.myname = colorName;\r
173                                         d.isnamedcolor = true;\r
174                                         c = d;\r
175                                 }\r
176                         }\r
177 \r
178                         return (Color) c;\r
179                 }\r
180 \r
181                 internal static Hashtable NamedColors\r
182                 {\r
183                         get {\r
184                                 FillColorNames ();\r
185                                 return namedColors;\r
186                         }\r
187                 }\r
188 \r
189                 internal static Hashtable SystemColors\r
190                 {\r
191                         get {\r
192                                 FillColorNames ();\r
193                                 return systemColors;\r
194                         }\r
195                 }\r
196                         \r
197                 // -----------------------\r
198                 // Public Shared Members\r
199                 // -----------------------\r
200 \r
201                 /// <summary>\r
202                 ///     Empty Shared Field\r
203                 /// </summary>\r
204                 ///\r
205                 /// <remarks>\r
206                 ///     An uninitialized Color Structure\r
207                 /// </remarks>\r
208                 \r
209                 public static readonly Color Empty;\r
210                 \r
211                 /// <summary>\r
212                 ///     Equality Operator\r
213                 /// </summary>\r
214                 ///\r
215                 /// <remarks>\r
216                 ///     Compares two Color objects. The return value is\r
217                 ///     based on the equivalence of the A,R,G,B properties \r
218                 ///     of the two Colors.\r
219                 /// </remarks>\r
220 \r
221                 public static bool operator == (Color colorA, Color colorB)\r
222                 {\r
223                         return ((colorA.a == colorB.a) && (colorA.r == colorB.r)\r
224                         && (colorA.g == colorB.g) && (colorA.b == colorB.b));\r
225                 }\r
226                 \r
227                 /// <summary>\r
228                 ///     Inequality Operator\r
229                 /// </summary>\r
230                 ///\r
231                 /// <remarks>\r
232                 ///     Compares two Color objects. The return value is\r
233                 ///     based on the equivalence of the A,R,G,B properties \r
234                 ///     of the two colors.\r
235                 /// </remarks>\r
236 \r
237                 public static bool operator != (Color colorA, Color colorB)\r
238                 {\r
239                         return ((colorA.a != colorB.a) || (colorA.r != colorB.r)\r
240                         || (colorA.g != colorB.g) || (colorA.b != colorB.b));\r
241                 }\r
242                 \r
243                 public float GetBrightness (){\r
244                         // Intensity is the normalized sum of the three RGB values.;\r
245                         return ((float)(r + g + b))/(255*3);\r
246                 }\r
247                 public float GetSaturation (){\r
248                         // S = 1 - I * Min(r,g,b)\r
249                         return (255 - \r
250                                 (((float)(r + g +b))/3)*Math.Min(r,Math.Min(g,b))\r
251                                 )/255;\r
252                 }\r
253 \r
254                 public float GetHue (){\r
255                         float top = ((float)(2*r-g-b))/(2*255);\r
256                         float bottom = (float)Math.Sqrt(((r-g)*(r-g) + (r-b)*(g-b))/255);\r
257                         return (float)Math.Acos(top/bottom);\r
258                 }\r
259                 \r
260                 // -----------------------\r
261                 // Public Instance Members\r
262                 // -----------------------\r
263 \r
264                 /// <summary>\r
265                 ///     ToKnownColor method\r
266                 /// </summary>\r
267                 ///\r
268                 /// <remarks>\r
269                 ///     Returns the KnownColor enum value for this color, 0 if is not known.\r
270                 /// </remarks>\r
271                 public KnownColor ToKnownColor ()\r
272                 {\r
273                         return knownColor;\r
274                 }\r
275 \r
276                 /// <summary>\r
277                 ///     IsEmpty Property\r
278                 /// </summary>\r
279                 ///\r
280                 /// <remarks>\r
281                 ///     Indicates transparent black. R,G,B = 0; A=0?\r
282                 /// </remarks>\r
283                 \r
284                 public bool IsEmpty \r
285                 {\r
286                         get {\r
287                                 return (a + r + g + b) == 0;\r
288                         }\r
289                 }\r
290 \r
291                 /// <summary>\r
292                 ///     A Property\r
293                 /// </summary>\r
294                 ///\r
295                 /// <remarks>\r
296                 ///     The transparancy of the Color.\r
297                 /// </remarks>\r
298                 \r
299                 public byte A\r
300                 {\r
301                         get {\r
302                                 return a;\r
303                         }\r
304                 }\r
305 \r
306                 /// <summary>\r
307                 ///     R Property\r
308                 /// </summary>\r
309                 ///\r
310                 /// <remarks>\r
311                 ///     The red value of the Color.\r
312                 /// </remarks>\r
313                 \r
314                 public byte R\r
315                 {\r
316                         get {\r
317                                 return r;\r
318                         }\r
319                 }\r
320 \r
321                 /// <summary>\r
322                 ///     G Property\r
323                 /// </summary>\r
324                 ///\r
325                 /// <remarks>\r
326                 ///     The green value of the Color.\r
327                 /// </remarks>\r
328                 \r
329                 public byte G\r
330                 {\r
331                         get {\r
332                                 return g;\r
333                         }\r
334                 }\r
335 \r
336                 /// <summary>\r
337                 ///     B Property\r
338                 /// </summary>\r
339                 ///\r
340                 /// <remarks>\r
341                 ///     The blue value of the Color.\r
342                 /// </remarks>\r
343                 \r
344                 public byte B\r
345                 {\r
346                         get {\r
347                                 return b;\r
348                         }\r
349                 }\r
350 \r
351                 /// <summary>\r
352                 ///     Equals Method\r
353                 /// </summary>\r
354                 ///\r
355                 /// <remarks>\r
356                 ///     Checks equivalence of this Color and another object.\r
357                 /// </remarks>\r
358                 \r
359                 public override bool Equals (object o)\r
360                 {\r
361                         if (!(o is Color))\r
362                                 return false;\r
363 \r
364                         Color c = (Color) o;\r
365                         if (c.r == r && c.g == g && c.b == b) {\r
366                                 if (myname != null || c.myname != null)\r
367                                         return (myname == c.myname);\r
368                                 return true;\r
369                         }\r
370                         return false;\r
371                 }\r
372 \r
373                 /// <summary>\r
374                 ///     Reference Equals Method\r
375                 ///     Is commented out because this is handled by the base class.\r
376                 ///     TODO: Is it correct to let the base class handel reference equals\r
377                 /// </summary>\r
378                 ///\r
379                 /// <remarks>\r
380                 ///     Checks equivalence of this Color and another object.\r
381                 /// </remarks>\r
382                 //public bool ReferenceEquals (object o)\r
383                 //{\r
384                 //      if (!(o is Color))return false;\r
385                 //      return (this == (Color) o);\r
386                 //}\r
387 \r
388 \r
389 \r
390                 /// <summary>\r
391                 ///     GetHashCode Method\r
392                 /// </summary>\r
393                 ///\r
394                 /// <remarks>\r
395                 ///     Calculates a hashing value.\r
396                 /// </remarks>\r
397                 \r
398                 public override int GetHashCode ()\r
399                 {\r
400                         return ToArgb().GetHashCode();\r
401                 }\r
402 \r
403                 /// <summary>\r
404                 ///     ToString Method\r
405                 /// </summary>\r
406                 ///\r
407                 /// <remarks>\r
408                 ///     Formats the Color as a string in ARGB notation.\r
409                 /// </remarks>\r
410                 \r
411                 public override string ToString ()\r
412                 {\r
413                         if (myname != "")\r
414                                 return "Color [" + myname + "]";\r
415 \r
416                         return String.Format ("Color [A={0}, R={1}, G={2}, B={3}]", a, r, g, b);\r
417                 }\r
418  \r
419                 private static void CheckRGBValues (int red,int green,int blue)\r
420                 {\r
421                         if( (red > 255) || (red < 0))\r
422                                 throw new System.ArgumentOutOfRangeException\r
423                                         ("red",red,"Value must be in the range 0 - 255");\r
424                         if( (green > 255) || (green < 0))\r
425                                 throw new System.ArgumentOutOfRangeException\r
426                                         ("green",green,"Value must be in the range 0 - 255");\r
427                         if( (blue > 255) || (blue < 0))\r
428                                 throw new System.ArgumentOutOfRangeException\r
429                                         ("blue",blue,"Value must be in the range 0 - 255");\r
430                 }\r
431 \r
432                 private static void CheckARGBValues (int alpha,int red,int green,int blue)\r
433                 {\r
434                         if( (alpha > 255) || (alpha < 0))\r
435                                 throw new System.ArgumentOutOfRangeException\r
436                                         ("alpha",alpha,"Value must be in the range 0 - 255");\r
437                         CheckRGBValues(red,green,blue);\r
438                 }\r
439 \r
440                 //Documentation, do not remove!\r
441                 //This is the program that was used to generate the C# source code below.\r
442                 //using System;\r
443                 //using System.Diagnostics;\r
444                 //using System.Drawing;\r
445                 //using System.Reflection;\r
446                 //public class m {\r
447                 //static void Main(string[] args)\r
448                 //{\r
449                 //      Type cType = typeof (Color);\r
450                 //      PropertyInfo [] properties = cType.GetProperties ();\r
451                 //      foreach (PropertyInfo property in properties) {\r
452                 //              MethodInfo method = property.GetGetMethod();\r
453                 //              if (method != null && method.IsStatic && method.ReturnType == cType) {\r
454                 //                      Color c = (Color) method.Invoke( null, new object[0] );\r
455                 //                      Console.WriteLine("static public Color " + property.Name);\r
456                 //                      Console.WriteLine("{\t\n\tget {");\r
457                 //                      Console.WriteLine("\t\treturn Color.FromArgbNamed ({0}, {1}, {2}, {3}, \"{4}\");",\r
458                 //                                              c.A, c.R, c.G, c.B, property.Name);\r
459                 //                      Console.WriteLine("\t}");\r
460                 //                      Console.WriteLine("}\n");\r
461                 //              }\r
462                 //      }\r
463                 //}\r
464                 //}\r
465 \r
466                 static public Color Transparent\r
467                 {       \r
468                         get {\r
469                                 return Color.FromArgbNamed (0, 255, 255, 255, "Transparent");\r
470                         }\r
471                 }\r
472 \r
473                 static public Color AliceBlue\r
474                 {       \r
475                         get {\r
476                                 return Color.FromArgbNamed (255, 240, 248, 255, "AliceBlue");\r
477                         }\r
478                 }\r
479 \r
480                 static public Color AntiqueWhite\r
481                 {       \r
482                         get {\r
483                                 return Color.FromArgbNamed (255, 250, 235, 215, "AntiqueWhite");\r
484                         }\r
485                 }\r
486 \r
487                 static public Color Aqua\r
488                 {       \r
489                         get {\r
490                                 return Color.FromArgbNamed (255, 0, 255, 255, "Aqua");\r
491                         }\r
492                 }\r
493 \r
494                 static public Color Aquamarine\r
495                 {       \r
496                         get {\r
497                                 return Color.FromArgbNamed (255, 127, 255, 212, "Aquamarine");\r
498                         }\r
499                 }\r
500 \r
501                 static public Color Azure\r
502                 {       \r
503                         get {\r
504                                 return Color.FromArgbNamed (255, 240, 255, 255, "Azure");\r
505                         }\r
506                 }\r
507 \r
508                 static public Color Beige\r
509                 {       \r
510                         get {\r
511                                 return Color.FromArgbNamed (255, 245, 245, 220, "Beige");\r
512                         }\r
513                 }\r
514 \r
515                 static public Color Bisque\r
516                 {       \r
517                         get {\r
518                                 return Color.FromArgbNamed (255, 255, 228, 196, "Bisque");\r
519                         }\r
520                 }\r
521 \r
522                 static public Color Black\r
523                 {       \r
524                         get {\r
525                                 return Color.FromArgbNamed (255, 0, 0, 0, "Black");\r
526                         }\r
527                 }\r
528 \r
529                 static public Color BlanchedAlmond\r
530                 {       \r
531                         get {\r
532                                 return Color.FromArgbNamed (255, 255, 235, 205, "BlanchedAlmond");\r
533                         }\r
534                 }\r
535 \r
536                 static public Color Blue\r
537                 {       \r
538                         get {\r
539                                 return Color.FromArgbNamed (255, 0, 0, 255, "Blue");\r
540                         }\r
541                 }\r
542 \r
543                 static public Color BlueViolet\r
544                 {       \r
545                         get {\r
546                                 return Color.FromArgbNamed (255, 138, 43, 226, "BlueViolet");\r
547                         }\r
548                 }\r
549 \r
550                 static public Color Brown\r
551                 {       \r
552                         get {\r
553                                 return Color.FromArgbNamed (255, 165, 42, 42, "Brown");\r
554                         }\r
555                 }\r
556 \r
557                 static public Color BurlyWood\r
558                 {       \r
559                         get {\r
560                                 return Color.FromArgbNamed (255, 222, 184, 135, "BurlyWood");\r
561                         }\r
562                 }\r
563 \r
564                 static public Color CadetBlue\r
565                 {       \r
566                         get {\r
567                                 return Color.FromArgbNamed (255, 95, 158, 160, "CadetBlue");\r
568                         }\r
569                 }\r
570 \r
571                 static public Color Chartreuse\r
572                 {       \r
573                         get {\r
574                                 return Color.FromArgbNamed (255, 127, 255, 0, "Chartreuse");\r
575                         }\r
576                 }\r
577 \r
578                 static public Color Chocolate\r
579                 {       \r
580                         get {\r
581                                 return Color.FromArgbNamed (255, 210, 105, 30, "Chocolate");\r
582                         }\r
583                 }\r
584 \r
585                 static public Color Coral\r
586                 {       \r
587                         get {\r
588                                 return Color.FromArgbNamed (255, 255, 127, 80, "Coral");\r
589                         }\r
590                 }\r
591 \r
592                 static public Color CornflowerBlue\r
593                 {       \r
594                         get {\r
595                                 return Color.FromArgbNamed (255, 100, 149, 237, "CornflowerBlue");\r
596                         }\r
597                 }\r
598 \r
599                 static public Color Cornsilk\r
600                 {       \r
601                         get {\r
602                                 return Color.FromArgbNamed (255, 255, 248, 220, "Cornsilk");\r
603                         }\r
604                 }\r
605 \r
606                 static public Color Crimson\r
607                 {       \r
608                         get {\r
609                                 return Color.FromArgbNamed (255, 220, 20, 60, "Crimson");\r
610                         }\r
611                 }\r
612 \r
613                 static public Color Cyan\r
614                 {       \r
615                         get {\r
616                                 return Color.FromArgbNamed (255, 0, 255, 255, "Cyan");\r
617                         }\r
618                 }\r
619 \r
620                 static public Color DarkBlue\r
621                 {       \r
622                         get {\r
623                                 return Color.FromArgbNamed (255, 0, 0, 139, "DarkBlue");\r
624                         }\r
625                 }\r
626 \r
627                 static public Color DarkCyan\r
628                 {       \r
629                         get {\r
630                                 return Color.FromArgbNamed (255, 0, 139, 139, "DarkCyan");\r
631                         }\r
632                 }\r
633 \r
634                 static public Color DarkGoldenrod\r
635                 {       \r
636                         get {\r
637                                 return Color.FromArgbNamed (255, 184, 134, 11, "DarkGoldenrod");\r
638                         }\r
639                 }\r
640 \r
641                 static public Color DarkGray\r
642                 {       \r
643                         get {\r
644                                 return Color.FromArgbNamed (255, 169, 169, 169, "DarkGray");\r
645                         }\r
646                 }\r
647 \r
648                 static public Color DarkGreen\r
649                 {       \r
650                         get {\r
651                                 return Color.FromArgbNamed (255, 0, 100, 0, "DarkGreen");\r
652                         }\r
653                 }\r
654 \r
655                 static public Color DarkKhaki\r
656                 {       \r
657                         get {\r
658                                 return Color.FromArgbNamed (255, 189, 183, 107, "DarkKhaki");\r
659                         }\r
660                 }\r
661 \r
662                 static public Color DarkMagenta\r
663                 {       \r
664                         get {\r
665                                 return Color.FromArgbNamed (255, 139, 0, 139, "DarkMagenta");\r
666                         }\r
667                 }\r
668 \r
669                 static public Color DarkOliveGreen\r
670                 {       \r
671                         get {\r
672                                 return Color.FromArgbNamed (255, 85, 107, 47, "DarkOliveGreen");\r
673                         }\r
674                 }\r
675 \r
676                 static public Color DarkOrange\r
677                 {       \r
678                         get {\r
679                                 return Color.FromArgbNamed (255, 255, 140, 0, "DarkOrange");\r
680                         }\r
681                 }\r
682 \r
683                 static public Color DarkOrchid\r
684                 {       \r
685                         get {\r
686                                 return Color.FromArgbNamed (255, 153, 50, 204, "DarkOrchid");\r
687                         }\r
688                 }\r
689 \r
690                 static public Color DarkRed\r
691                 {       \r
692                         get {\r
693                                 return Color.FromArgbNamed (255, 139, 0, 0, "DarkRed");\r
694                         }\r
695                 }\r
696 \r
697                 static public Color DarkSalmon\r
698                 {       \r
699                         get {\r
700                                 return Color.FromArgbNamed (255, 233, 150, 122, "DarkSalmon");\r
701                         }\r
702                 }\r
703 \r
704                 static public Color DarkSeaGreen\r
705                 {       \r
706                         get {\r
707                                 return Color.FromArgbNamed (255, 143, 188, 139, "DarkSeaGreen");\r
708                         }\r
709                 }\r
710 \r
711                 static public Color DarkSlateBlue\r
712                 {       \r
713                         get {\r
714                                 return Color.FromArgbNamed (255, 72, 61, 139, "DarkSlateBlue");\r
715                         }\r
716                 }\r
717 \r
718                 static public Color DarkSlateGray\r
719                 {       \r
720                         get {\r
721                                 return Color.FromArgbNamed (255, 47, 79, 79, "DarkSlateGray");\r
722                         }\r
723                 }\r
724 \r
725                 static public Color DarkTurquoise\r
726                 {       \r
727                         get {\r
728                                 return Color.FromArgbNamed (255, 0, 206, 209, "DarkTurquoise");\r
729                         }\r
730                 }\r
731 \r
732                 static public Color DarkViolet\r
733                 {       \r
734                         get {\r
735                                 return Color.FromArgbNamed (255, 148, 0, 211, "DarkViolet");\r
736                         }\r
737                 }\r
738 \r
739                 static public Color DeepPink\r
740                 {       \r
741                         get {\r
742                                 return Color.FromArgbNamed (255, 255, 20, 147, "DeepPink");\r
743                         }\r
744                 }\r
745 \r
746                 static public Color DeepSkyBlue\r
747                 {       \r
748                         get {\r
749                                 return Color.FromArgbNamed (255, 0, 191, 255, "DeepSkyBlue");\r
750                         }\r
751                 }\r
752 \r
753                 static public Color DimGray\r
754                 {       \r
755                         get {\r
756                                 return Color.FromArgbNamed (255, 105, 105, 105, "DimGray");\r
757                         }\r
758                 }\r
759 \r
760                 static public Color DodgerBlue\r
761                 {       \r
762                         get {\r
763                                 return Color.FromArgbNamed (255, 30, 144, 255, "DodgerBlue");\r
764                         }\r
765                 }\r
766 \r
767                 static public Color Firebrick\r
768                 {       \r
769                         get {\r
770                                 return Color.FromArgbNamed (255, 178, 34, 34, "Firebrick");\r
771                         }\r
772                 }\r
773 \r
774                 static public Color FloralWhite\r
775                 {       \r
776                         get {\r
777                                 return Color.FromArgbNamed (255, 255, 250, 240, "FloralWhite");\r
778                         }\r
779                 }\r
780 \r
781                 static public Color ForestGreen\r
782                 {       \r
783                         get {\r
784                                 return Color.FromArgbNamed (255, 34, 139, 34, "ForestGreen");\r
785                         }\r
786                 }\r
787 \r
788                 static public Color Fuchsia\r
789                 {       \r
790                         get {\r
791                                 return Color.FromArgbNamed (255, 255, 0, 255, "Fuchsia");\r
792                         }\r
793                 }\r
794 \r
795                 static public Color Gainsboro\r
796                 {       \r
797                         get {\r
798                                 return Color.FromArgbNamed (255, 220, 220, 220, "Gainsboro");\r
799                         }\r
800                 }\r
801 \r
802                 static public Color GhostWhite\r
803                 {       \r
804                         get {\r
805                                 return Color.FromArgbNamed (255, 248, 248, 255, "GhostWhite");\r
806                         }\r
807                 }\r
808 \r
809                 static public Color Gold\r
810                 {       \r
811                         get {\r
812                                 return Color.FromArgbNamed (255, 255, 215, 0, "Gold");\r
813                         }\r
814                 }\r
815 \r
816                 static public Color Goldenrod\r
817                 {       \r
818                         get {\r
819                                 return Color.FromArgbNamed (255, 218, 165, 32, "Goldenrod");\r
820                         }\r
821                 }\r
822 \r
823                 static public Color Gray\r
824                 {       \r
825                         get {\r
826                                 return Color.FromArgbNamed (255, 128, 128, 128, "Gray");\r
827                         }\r
828                 }\r
829 \r
830                 static public Color Green\r
831                 {       \r
832                         get {\r
833                                 return Color.FromArgbNamed (255, 0, 128, 0, "Green");\r
834                         }\r
835                 }\r
836 \r
837                 static public Color GreenYellow\r
838                 {       \r
839                         get {\r
840                                 return Color.FromArgbNamed (255, 173, 255, 47, "GreenYellow");\r
841                         }\r
842                 }\r
843 \r
844                 static public Color Honeydew\r
845                 {       \r
846                         get {\r
847                                 return Color.FromArgbNamed (255, 240, 255, 240, "Honeydew");\r
848                         }\r
849                 }\r
850 \r
851                 static public Color HotPink\r
852                 {       \r
853                         get {\r
854                                 return Color.FromArgbNamed (255, 255, 105, 180, "HotPink");\r
855                         }\r
856                 }\r
857 \r
858                 static public Color IndianRed\r
859                 {       \r
860                         get {\r
861                                 return Color.FromArgbNamed (255, 205, 92, 92, "IndianRed");\r
862                         }\r
863                 }\r
864 \r
865                 static public Color Indigo\r
866                 {       \r
867                         get {\r
868                                 return Color.FromArgbNamed (255, 75, 0, 130, "Indigo");\r
869                         }\r
870                 }\r
871 \r
872                 static public Color Ivory\r
873                 {       \r
874                         get {\r
875                                 return Color.FromArgbNamed (255, 255, 255, 240, "Ivory");\r
876                         }\r
877                 }\r
878 \r
879                 static public Color Khaki\r
880                 {       \r
881                         get {\r
882                                 return Color.FromArgbNamed (255, 240, 230, 140, "Khaki");\r
883                         }\r
884                 }\r
885 \r
886                 static public Color Lavender\r
887                 {       \r
888                         get {\r
889                                 return Color.FromArgbNamed (255, 230, 230, 250, "Lavender");\r
890                         }\r
891                 }\r
892 \r
893                 static public Color LavenderBlush\r
894                 {       \r
895                         get {\r
896                                 return Color.FromArgbNamed (255, 255, 240, 245, "LavenderBlush");\r
897                         }\r
898                 }\r
899 \r
900                 static public Color LawnGreen\r
901                 {       \r
902                         get {\r
903                                 return Color.FromArgbNamed (255, 124, 252, 0, "LawnGreen");\r
904                         }\r
905                 }\r
906 \r
907                 static public Color LemonChiffon\r
908                 {       \r
909                         get {\r
910                                 return Color.FromArgbNamed (255, 255, 250, 205, "LemonChiffon");\r
911                         }\r
912                 }\r
913 \r
914                 static public Color LightBlue\r
915                 {       \r
916                         get {\r
917                                 return Color.FromArgbNamed (255, 173, 216, 230, "LightBlue");\r
918                         }\r
919                 }\r
920 \r
921                 static public Color LightCoral\r
922                 {       \r
923                         get {\r
924                                 return Color.FromArgbNamed (255, 240, 128, 128, "LightCoral");\r
925                         }\r
926                 }\r
927 \r
928                 static public Color LightCyan\r
929                 {       \r
930                         get {\r
931                                 return Color.FromArgbNamed (255, 224, 255, 255, "LightCyan");\r
932                         }\r
933                 }\r
934 \r
935                 static public Color LightGoldenrodYellow\r
936                 {       \r
937                         get {\r
938                                 return Color.FromArgbNamed (255, 250, 250, 210, "LightGoldenrodYellow");\r
939                         }\r
940                 }\r
941 \r
942                 static public Color LightGreen\r
943                 {       \r
944                         get {\r
945                                 return Color.FromArgbNamed (255, 144, 238, 144, "LightGreen");\r
946                         }\r
947                 }\r
948 \r
949                 static public Color LightGray\r
950                 {       \r
951                         get {\r
952                                 return Color.FromArgbNamed (255, 211, 211, 211, "LightGray");\r
953                         }\r
954                 }\r
955 \r
956                 static public Color LightPink\r
957                 {       \r
958                         get {\r
959                                 return Color.FromArgbNamed (255, 255, 182, 193, "LightPink");\r
960                         }\r
961                 }\r
962 \r
963                 static public Color LightSalmon\r
964                 {       \r
965                         get {\r
966                                 return Color.FromArgbNamed (255, 255, 160, 122, "LightSalmon");\r
967                         }\r
968                 }\r
969 \r
970                 static public Color LightSeaGreen\r
971                 {       \r
972                         get {\r
973                                 return Color.FromArgbNamed (255, 32, 178, 170, "LightSeaGreen");\r
974                         }\r
975                 }\r
976 \r
977                 static public Color LightSkyBlue\r
978                 {       \r
979                         get {\r
980                                 return Color.FromArgbNamed (255, 135, 206, 250, "LightSkyBlue");\r
981                         }\r
982                 }\r
983 \r
984                 static public Color LightSlateGray\r
985                 {       \r
986                         get {\r
987                                 return Color.FromArgbNamed (255, 119, 136, 153, "LightSlateGray");\r
988                         }\r
989                 }\r
990 \r
991                 static public Color LightSteelBlue\r
992                 {       \r
993                         get {\r
994                                 return Color.FromArgbNamed (255, 176, 196, 222, "LightSteelBlue");\r
995                         }\r
996                 }\r
997 \r
998                 static public Color LightYellow\r
999                 {       \r
1000                         get {\r
1001                                 return Color.FromArgbNamed (255, 255, 255, 224, "LightYellow");\r
1002                         }\r
1003                 }\r
1004 \r
1005                 static public Color Lime\r
1006                 {       \r
1007                         get {\r
1008                                 return Color.FromArgbNamed (255, 0, 255, 0, "Lime");\r
1009                         }\r
1010                 }\r
1011 \r
1012                 static public Color LimeGreen\r
1013                 {       \r
1014                         get {\r
1015                                 return Color.FromArgbNamed (255, 50, 205, 50, "LimeGreen");\r
1016                         }\r
1017                 }\r
1018 \r
1019                 static public Color Linen\r
1020                 {       \r
1021                         get {\r
1022                                 return Color.FromArgbNamed (255, 250, 240, 230, "Linen");\r
1023                         }\r
1024                 }\r
1025 \r
1026                 static public Color Magenta\r
1027                 {       \r
1028                         get {\r
1029                                 return Color.FromArgbNamed (255, 255, 0, 255, "Magenta");\r
1030                         }\r
1031                 }\r
1032 \r
1033                 static public Color Maroon\r
1034                 {       \r
1035                         get {\r
1036                                 return Color.FromArgbNamed (255, 128, 0, 0, "Maroon");\r
1037                         }\r
1038                 }\r
1039 \r
1040                 static public Color MediumAquamarine\r
1041                 {       \r
1042                         get {\r
1043                                 return Color.FromArgbNamed (255, 102, 205, 170, "MediumAquamarine");\r
1044                         }\r
1045                 }\r
1046 \r
1047                 static public Color MediumBlue\r
1048                 {       \r
1049                         get {\r
1050                                 return Color.FromArgbNamed (255, 0, 0, 205, "MediumBlue");\r
1051                         }\r
1052                 }\r
1053 \r
1054                 static public Color MediumOrchid\r
1055                 {       \r
1056                         get {\r
1057                                 return Color.FromArgbNamed (255, 186, 85, 211, "MediumOrchid");\r
1058                         }\r
1059                 }\r
1060 \r
1061                 static public Color MediumPurple\r
1062                 {       \r
1063                         get {\r
1064                                 return Color.FromArgbNamed (255, 147, 112, 219, "MediumPurple");\r
1065                         }\r
1066                 }\r
1067 \r
1068                 static public Color MediumSeaGreen\r
1069                 {       \r
1070                         get {\r
1071                                 return Color.FromArgbNamed (255, 60, 179, 113, "MediumSeaGreen");\r
1072                         }\r
1073                 }\r
1074 \r
1075                 static public Color MediumSlateBlue\r
1076                 {       \r
1077                         get {\r
1078                                 return Color.FromArgbNamed (255, 123, 104, 238, "MediumSlateBlue");\r
1079                         }\r
1080                 }\r
1081 \r
1082                 static public Color MediumSpringGreen\r
1083                 {       \r
1084                         get {\r
1085                                 return Color.FromArgbNamed (255, 0, 250, 154, "MediumSpringGreen");\r
1086                         }\r
1087                 }\r
1088 \r
1089                 static public Color MediumTurquoise\r
1090                 {       \r
1091                         get {\r
1092                                 return Color.FromArgbNamed (255, 72, 209, 204, "MediumTurquoise");\r
1093                         }\r
1094                 }\r
1095 \r
1096                 static public Color MediumVioletRed\r
1097                 {       \r
1098                         get {\r
1099                                 return Color.FromArgbNamed (255, 199, 21, 133, "MediumVioletRed");\r
1100                         }\r
1101                 }\r
1102 \r
1103                 static public Color MidnightBlue\r
1104                 {       \r
1105                         get {\r
1106                                 return Color.FromArgbNamed (255, 25, 25, 112, "MidnightBlue");\r
1107                         }\r
1108                 }\r
1109 \r
1110                 static public Color MintCream\r
1111                 {       \r
1112                         get {\r
1113                                 return Color.FromArgbNamed (255, 245, 255, 250, "MintCream");\r
1114                         }\r
1115                 }\r
1116 \r
1117                 static public Color MistyRose\r
1118                 {       \r
1119                         get {\r
1120                                 return Color.FromArgbNamed (255, 255, 228, 225, "MistyRose");\r
1121                         }\r
1122                 }\r
1123 \r
1124                 static public Color Moccasin\r
1125                 {       \r
1126                         get {\r
1127                                 return Color.FromArgbNamed (255, 255, 228, 181, "Moccasin");\r
1128                         }\r
1129                 }\r
1130 \r
1131                 static public Color NavajoWhite\r
1132                 {       \r
1133                         get {\r
1134                                 return Color.FromArgbNamed (255, 255, 222, 173, "NavajoWhite");\r
1135                         }\r
1136                 }\r
1137 \r
1138                 static public Color Navy\r
1139                 {       \r
1140                         get {\r
1141                                 return Color.FromArgbNamed (255, 0, 0, 128, "Navy");\r
1142                         }\r
1143                 }\r
1144 \r
1145                 static public Color OldLace\r
1146                 {       \r
1147                         get {\r
1148                                 return Color.FromArgbNamed (255, 253, 245, 230, "OldLace");\r
1149                         }\r
1150                 }\r
1151 \r
1152                 static public Color Olive\r
1153                 {       \r
1154                         get {\r
1155                                 return Color.FromArgbNamed (255, 128, 128, 0, "Olive");\r
1156                         }\r
1157                 }\r
1158 \r
1159                 static public Color OliveDrab\r
1160                 {       \r
1161                         get {\r
1162                                 return Color.FromArgbNamed (255, 107, 142, 35, "OliveDrab");\r
1163                         }\r
1164                 }\r
1165 \r
1166                 static public Color Orange\r
1167                 {       \r
1168                         get {\r
1169                                 return Color.FromArgbNamed (255, 255, 165, 0, "Orange");\r
1170                         }\r
1171                 }\r
1172 \r
1173                 static public Color OrangeRed\r
1174                 {       \r
1175                         get {\r
1176                                 return Color.FromArgbNamed (255, 255, 69, 0, "OrangeRed");\r
1177                         }\r
1178                 }\r
1179 \r
1180                 static public Color Orchid\r
1181                 {       \r
1182                         get {\r
1183                                 return Color.FromArgbNamed (255, 218, 112, 214, "Orchid");\r
1184                         }\r
1185                 }\r
1186 \r
1187                 static public Color PaleGoldenrod\r
1188                 {       \r
1189                         get {\r
1190                                 return Color.FromArgbNamed (255, 238, 232, 170, "PaleGoldenrod");\r
1191                         }\r
1192                 }\r
1193 \r
1194                 static public Color PaleGreen\r
1195                 {       \r
1196                         get {\r
1197                                 return Color.FromArgbNamed (255, 152, 251, 152, "PaleGreen");\r
1198                         }\r
1199                 }\r
1200 \r
1201                 static public Color PaleTurquoise\r
1202                 {       \r
1203                         get {\r
1204                                 return Color.FromArgbNamed (255, 175, 238, 238, "PaleTurquoise");\r
1205                         }\r
1206                 }\r
1207 \r
1208                 static public Color PaleVioletRed\r
1209                 {       \r
1210                         get {\r
1211                                 return Color.FromArgbNamed (255, 219, 112, 147, "PaleVioletRed");\r
1212                         }\r
1213                 }\r
1214 \r
1215                 static public Color PapayaWhip\r
1216                 {       \r
1217                         get {\r
1218                                 return Color.FromArgbNamed (255, 255, 239, 213, "PapayaWhip");\r
1219                         }\r
1220                 }\r
1221 \r
1222                 static public Color PeachPuff\r
1223                 {       \r
1224                         get {\r
1225                                 return Color.FromArgbNamed (255, 255, 218, 185, "PeachPuff");\r
1226                         }\r
1227                 }\r
1228 \r
1229                 static public Color Peru\r
1230                 {       \r
1231                         get {\r
1232                                 return Color.FromArgbNamed (255, 205, 133, 63, "Peru");\r
1233                         }\r
1234                 }\r
1235 \r
1236                 static public Color Pink\r
1237                 {       \r
1238                         get {\r
1239                                 return Color.FromArgbNamed (255, 255, 192, 203, "Pink");\r
1240                         }\r
1241                 }\r
1242 \r
1243                 static public Color Plum\r
1244                 {       \r
1245                         get {\r
1246                                 return Color.FromArgbNamed (255, 221, 160, 221, "Plum");\r
1247                         }\r
1248                 }\r
1249 \r
1250                 static public Color PowderBlue\r
1251                 {       \r
1252                         get {\r
1253                                 return Color.FromArgbNamed (255, 176, 224, 230, "PowderBlue");\r
1254                         }\r
1255                 }\r
1256 \r
1257                 static public Color Purple\r
1258                 {       \r
1259                         get {\r
1260                                 return Color.FromArgbNamed (255, 128, 0, 128, "Purple");\r
1261                         }\r
1262                 }\r
1263 \r
1264                 static public Color Red\r
1265                 {       \r
1266                         get {\r
1267                                 return Color.FromArgbNamed (255, 255, 0, 0, "Red");\r
1268                         }\r
1269                 }\r
1270 \r
1271                 static public Color RosyBrown\r
1272                 {       \r
1273                         get {\r
1274                                 return Color.FromArgbNamed (255, 188, 143, 143, "RosyBrown");\r
1275                         }\r
1276                 }\r
1277 \r
1278                 static public Color RoyalBlue\r
1279                 {       \r
1280                         get {\r
1281                                 return Color.FromArgbNamed (255, 65, 105, 225, "RoyalBlue");\r
1282                         }\r
1283                 }\r
1284 \r
1285                 static public Color SaddleBrown\r
1286                 {       \r
1287                         get {\r
1288                                 return Color.FromArgbNamed (255, 139, 69, 19, "SaddleBrown");\r
1289                         }\r
1290                 }\r
1291 \r
1292                 static public Color Salmon\r
1293                 {       \r
1294                         get {\r
1295                                 return Color.FromArgbNamed (255, 250, 128, 114, "Salmon");\r
1296                         }\r
1297                 }\r
1298 \r
1299                 static public Color SandyBrown\r
1300                 {       \r
1301                         get {\r
1302                                 return Color.FromArgbNamed (255, 244, 164, 96, "SandyBrown");\r
1303                         }\r
1304                 }\r
1305 \r
1306                 static public Color SeaGreen\r
1307                 {       \r
1308                         get {\r
1309                                 return Color.FromArgbNamed (255, 46, 139, 87, "SeaGreen");\r
1310                         }\r
1311                 }\r
1312 \r
1313                 static public Color SeaShell\r
1314                 {       \r
1315                         get {\r
1316                                 return Color.FromArgbNamed (255, 255, 245, 238, "SeaShell");\r
1317                         }\r
1318                 }\r
1319 \r
1320                 static public Color Sienna\r
1321                 {       \r
1322                         get {\r
1323                                 return Color.FromArgbNamed (255, 160, 82, 45, "Sienna");\r
1324                         }\r
1325                 }\r
1326 \r
1327                 static public Color Silver\r
1328                 {       \r
1329                         get {\r
1330                                 return Color.FromArgbNamed (255, 192, 192, 192, "Silver");\r
1331                         }\r
1332                 }\r
1333 \r
1334                 static public Color SkyBlue\r
1335                 {       \r
1336                         get {\r
1337                                 return Color.FromArgbNamed (255, 135, 206, 235, "SkyBlue");\r
1338                         }\r
1339                 }\r
1340 \r
1341                 static public Color SlateBlue\r
1342                 {       \r
1343                         get {\r
1344                                 return Color.FromArgbNamed (255, 106, 90, 205, "SlateBlue");\r
1345                         }\r
1346                 }\r
1347 \r
1348                 static public Color SlateGray\r
1349                 {       \r
1350                         get {\r
1351                                 return Color.FromArgbNamed (255, 112, 128, 144, "SlateGray");\r
1352                         }\r
1353                 }\r
1354 \r
1355                 static public Color Snow\r
1356                 {       \r
1357                         get {\r
1358                                 return Color.FromArgbNamed (255, 255, 250, 250, "Snow");\r
1359                         }\r
1360                 }\r
1361 \r
1362                 static public Color SpringGreen\r
1363                 {       \r
1364                         get {\r
1365                                 return Color.FromArgbNamed (255, 0, 255, 127, "SpringGreen");\r
1366                         }\r
1367                 }\r
1368 \r
1369                 static public Color SteelBlue\r
1370                 {       \r
1371                         get {\r
1372                                 return Color.FromArgbNamed (255, 70, 130, 180, "SteelBlue");\r
1373                         }\r
1374                 }\r
1375 \r
1376                 static public Color Tan\r
1377                 {       \r
1378                         get {\r
1379                                 return Color.FromArgbNamed (255, 210, 180, 140, "Tan");\r
1380                         }\r
1381                 }\r
1382 \r
1383                 static public Color Teal\r
1384                 {       \r
1385                         get {\r
1386                                 return Color.FromArgbNamed (255, 0, 128, 128, "Teal");\r
1387                         }\r
1388                 }\r
1389 \r
1390                 static public Color Thistle\r
1391                 {       \r
1392                         get {\r
1393                                 return Color.FromArgbNamed (255, 216, 191, 216, "Thistle");\r
1394                         }\r
1395                 }\r
1396 \r
1397                 static public Color Tomato\r
1398                 {       \r
1399                         get {\r
1400                                 return Color.FromArgbNamed (255, 255, 99, 71, "Tomato");\r
1401                         }\r
1402                 }\r
1403 \r
1404                 static public Color Turquoise\r
1405                 {       \r
1406                         get {\r
1407                                 return Color.FromArgbNamed (255, 64, 224, 208, "Turquoise");\r
1408                         }\r
1409                 }\r
1410 \r
1411                 static public Color Violet\r
1412                 {       \r
1413                         get {\r
1414                                 return Color.FromArgbNamed (255, 238, 130, 238, "Violet");\r
1415                         }\r
1416                 }\r
1417 \r
1418                 static public Color Wheat\r
1419                 {       \r
1420                         get {\r
1421                                 return Color.FromArgbNamed (255, 245, 222, 179, "Wheat");\r
1422                         }\r
1423                 }\r
1424 \r
1425                 static public Color White\r
1426                 {       \r
1427                         get {\r
1428                                 return Color.FromArgbNamed (255, 255, 255, 255, "White");\r
1429                         }\r
1430                 }\r
1431 \r
1432                 static public Color WhiteSmoke\r
1433                 {       \r
1434                         get {\r
1435                                 return Color.FromArgbNamed (255, 245, 245, 245, "WhiteSmoke");\r
1436                         }\r
1437                 }\r
1438 \r
1439                 static public Color Yellow\r
1440                 {       \r
1441                         get {\r
1442                                 return Color.FromArgbNamed (255, 255, 255, 0, "Yellow");\r
1443                         }\r
1444                 }\r
1445 \r
1446                 static public Color YellowGreen\r
1447                 {       \r
1448                         get {\r
1449                                 return Color.FromArgbNamed (255, 154, 205, 50, "YellowGreen");\r
1450                         }\r
1451                 }\r
1452         }\r
1453 }\r