Author: spouliot
Date: 2007-04-26 15:58:52 -0400 (Thu, 26 Apr 2007)
New Revision: 76351

Modified:
   trunk/mcs/class/System.Drawing/System.Drawing/ChangeLog
   trunk/mcs/class/System.Drawing/System.Drawing/Color.cs
   trunk/mcs/class/System.Drawing/System.Drawing/ColorConverter.cs
   trunk/mcs/class/System.Drawing/System.Drawing/ColorTranslator.cs
   trunk/mcs/class/System.Drawing/System.Drawing/KnownColors.cs
Log:
2007-04-26  Sebastien Pouliot  <[EMAIL PROTECTED]>

        * Color.cs: Try to avoid calling GetName in GetHashCode when the color
        isn't named. Commented code (#81465) to remove the string name member 
        for the 2.0 profile (to avoid a reference in a struct).
        * ColorConverter.cs: Use the new KnownColor static uint array.
        * ColorTranslator.cs: Share code between From[Win32|Ole] (both BGR).
        Reduce ToHtml switch size (when html name == known color name).
        * KnownColors.cs: Remove the array of struct for every known colors.
        Add an array of uint with color values and a method to return the name
        of a known color. Big reduction of the static ctor code size.



Modified: trunk/mcs/class/System.Drawing/System.Drawing/ChangeLog
===================================================================
--- trunk/mcs/class/System.Drawing/System.Drawing/ChangeLog     2007-04-26 
19:26:09 UTC (rev 76350)
+++ trunk/mcs/class/System.Drawing/System.Drawing/ChangeLog     2007-04-26 
19:58:52 UTC (rev 76351)
@@ -1,3 +1,15 @@
+2007-04-26  Sebastien Pouliot  <[EMAIL PROTECTED]>
+
+       * Color.cs: Try to avoid calling GetName in GetHashCode when the color
+       isn't named. Commented code (#81465) to remove the string name member 
+       for the 2.0 profile (to avoid a reference in a struct).
+       * ColorConverter.cs: Use the new KnownColor static uint array.
+       * ColorTranslator.cs: Share code between From[Win32|Ole] (both BGR).
+       Reduce ToHtml switch size (when html name == known color name).
+       * KnownColors.cs: Remove the array of struct for every known colors.
+       Add an array of uint with color values and a method to return the name
+       of a known color. Big reduction of the static ctor code size.
+
 2007-04-26  Sebastien Pouliot  <[EMAIL PROTECTED]> 
 
        * gdipFunctions.cs: Add p/invoke definitions for GdipRecordMetafile

Modified: trunk/mcs/class/System.Drawing/System.Drawing/Color.cs
===================================================================
--- trunk/mcs/class/System.Drawing/System.Drawing/Color.cs      2007-04-26 
19:26:09 UTC (rev 76350)
+++ trunk/mcs/class/System.Drawing/System.Drawing/Color.cs      2007-04-26 
19:58:52 UTC (rev 76351)
@@ -33,7 +33,6 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System.Collections;
 using System.ComponentModel;
 using System.Runtime.InteropServices;
 
@@ -66,26 +65,54 @@
 
                internal short state;
                internal short knownColor;
+// #if ONLY_1_1
+// Mono bug #81465 is holding this change
+               // MS 1.1 requires this member to be present for serialization 
(not so in 2.0)
+               // however it's bad to keep a string (reference) in a struct
                internal string name;
-
+// #endif
 #if TARGET_JVM
                internal java.awt.Color NativeObject {
                        get {
                                return new java.awt.Color (R, G, B, A);
                        }
                }
+
+               internal static Color FromArgbNamed (int alpha, int red, int 
green, int blue, string name, KnownColor knownColor)
+               {
+                       Color color = FromArgb (alpha, red, green, blue);
+                       color.state = (short) (ColorType.Known|ColorType.Named);
+                       color.name = KnownColors.GetName (knownColor);
+                       color.knownColor = (short) knownColor;
+                       return color;
+               }
+
+               internal static Color FromArgbSystem (int alpha, int red, int 
green, int blue, string name, KnownColor knownColor)
+               {
+                       Color color = FromArgbNamed (alpha, red, green, blue, 
name, knownColor);
+                       color.state |= (short) ColorType.System;
+                       return color;
+               }
 #endif
 
                public string Name {
-                       get{
+                       get {
+#if NET_2_0_ONCE_MONO_BUG_81465_IS_FIXED
+                               if (IsNamedColor)
+                                       return KnownColors.GetName (knownColor);
+                               else
+                                       return String.Format ("{0:x}", ToArgb 
());
+#else
+                               // name is required for serialization under 
1.x, but not under 2.0
                                if (name == null) {
                                        // Can happen with stuff deserialized 
from MS
                                        if (IsNamedColor)
-                                               name = 
KnownColors.FromKnownColor ((KnownColor)knownColor).Name;
+                                               name = KnownColors.GetName 
(knownColor);
                                        else
                                                name = String.Format ("{0:x}", 
ToArgb ());
                                }
                                return name;
+#endif
                        }
                }
 
@@ -118,29 +145,10 @@
                        CheckARGBValues (alpha, red, green, blue);
                        Color color = new Color ();
                        color.state = (short) ColorType.ARGB;
-                       color.value = ((uint) alpha << 24) + (red << 16) + 
(green << 8) + blue;
+                       color.value = (int)((uint) alpha << 24) + (red << 16) + 
(green << 8) + blue;
                        return color;
                }
 
-               internal static Color FromArgbNamed (int alpha, int red, int 
green, int blue, string name, KnownColor knownColor)
-               {
-                       Color color = FromArgb (alpha, red, green, blue);
-                       color.state = (short) (ColorType.Known|ColorType.Named);
-                       //color.issystemcolor = false; //???
-                       color.name = name;
-                       // FIXME: here happens SEGFAULT.
-                       //color.knownColor = (KnownColor) Enum.Parse (typeof 
(KnownColor), name, false);
-                       color.knownColor = (short) knownColor;
-                       return color;
-               }
-
-               internal static Color FromArgbSystem (int alpha, int red, int 
green, int blue, string name, KnownColor knownColor)
-               {
-                       Color color = FromArgbNamed (alpha, red, green, blue, 
name, knownColor);
-                       color.state |= (short) ColorType.System;
-                       return color;
-               }
-
                public int ToArgb()
                {
                        return (int) value;
@@ -431,7 +439,10 @@
                
                public override int GetHashCode ()
                {
-                       return ((int) value) ^ Name.GetHashCode ();
+                       int hc = (int)(value ^ (value >> 32) ^ state ^ 
(knownColor >> 16));
+                       if (IsNamedColor)
+                               hc ^= Name.GetHashCode ();
+                       return hc;
                }
 
                /// <summary>

Modified: trunk/mcs/class/System.Drawing/System.Drawing/ColorConverter.cs
===================================================================
--- trunk/mcs/class/System.Drawing/System.Drawing/ColorConverter.cs     
2007-04-26 19:26:09 UTC (rev 76350)
+++ trunk/mcs/class/System.Drawing/System.Drawing/ColorConverter.cs     
2007-04-26 19:58:52 UTC (rev 76351)
@@ -150,13 +150,10 @@
                        } 
 
                        if (!result.IsEmpty) {
-                               Color resultColor = (Color) result;
-
                                // Look for a named or system color with those 
values
-                               foreach (Color c in KnownColors.Values) {
-                                       if (c == resultColor)
-                                               return c;
-                               }
+                               Color known = KnownColors.FindColorMatch 
(result);
+                               if (!known.IsEmpty)
+                                       return known;
                        }
 
                        return result;
@@ -228,9 +225,10 @@
                                if (cached != null)
                                        return cached;
 
-                               // copy all colors except the first empty slot
-                               Array colors = Array.CreateInstance (typeof 
(Color), KnownColors.Values.Length - 1);
-                               Array.Copy (KnownColors.Values, 1, colors, 0, 
colors.Length);
+                               Array colors = Array.CreateInstance (typeof 
(Color), KnownColors.ArgbValues.Length - 1);
+                               for (int i=1; i < 
KnownColors.ArgbValues.Length; i++) {
+                                       colors.SetValue 
(KnownColors.FromKnownColor ((KnownColor)i), i - 1);
+                               }
                                Array.Sort (colors, 0, colors.Length, new 
CompareColors ());
                                cached = new StandardValuesCollection (colors);
                        }

Modified: trunk/mcs/class/System.Drawing/System.Drawing/ColorTranslator.cs
===================================================================
--- trunk/mcs/class/System.Drawing/System.Drawing/ColorTranslator.cs    
2007-04-26 19:26:09 UTC (rev 76350)
+++ trunk/mcs/class/System.Drawing/System.Drawing/ColorTranslator.cs    
2007-04-26 19:58:52 UTC (rev 76351)
@@ -7,7 +7,7 @@
 //     Sebastien Pouliot  <[EMAIL PROTECTED]>
 //
 // Copyright (C) 2001 Ximian, Inc.  http://www.ximian.com
-// Copyright (C) 2004,2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2004,2006-2007 Novell, Inc (http://www.novell.com)
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
@@ -30,6 +30,7 @@
 //
  
 using System.ComponentModel;
+using System.Globalization;
 
 namespace System.Drawing {
 
@@ -62,56 +63,53 @@
                        return (Color) converter.ConvertFromString (htmlColor);
                }
 
+               internal static Color FromBGR (int bgr)
+               {
+                       Color result = Color.FromArgb (0xFF, (bgr & 0xFF), 
((bgr >> 8) & 0xFF), ((bgr >> 16) & 0xFF));
+                       Color known = KnownColors.FindColorMatch (result);
+                       return (known.IsEmpty) ? result : known;
+               }
+
                public static Color FromOle (int oleColor)
                {
                        // OleColor format is BGR
-                       int R = oleColor & 0xFF;
-                       int G = (oleColor >> 8) & 0xFF;
-                       int B = (oleColor >> 16) & 0xFF;
-
-                       Color retcolor = Color.FromArgb (255, R, G, B);
-                       foreach (Color c in KnownColors.Values) {
-                               if (c == retcolor)
-                                       return c;
-                       }
-
-                       return retcolor;
+                       return FromBGR (oleColor);
                }
 
                public static Color FromWin32 (int win32Color)
                {
                        // Win32Color format is BGR
-                       int R = win32Color & 0xFF;
-                       int G = (win32Color >> 8) & 0xFF;
-                       int B = (win32Color >> 16) & 0xFF;
-
-                       Color retcolor = Color.FromArgb (255, R, G, B);
-                       foreach (Color c in KnownColors.Values) {
-                               if (c == retcolor)
-                                       return c;
-                       }
-
-                       return retcolor;
+                       return FromBGR (win32Color);
                }
 
                public static string ToHtml (Color c)
                {
-                       KnownColor kc;
                        if (c.IsEmpty)
                                return String.Empty;
 
-                       string result;
-                       if(c.IsSystemColor) {
-                               kc = c.ToKnownColor();
+                       if (c.IsSystemColor) {
+                               KnownColor kc = c.ToKnownColor ();
                                switch (kc) {
                                case KnownColor.ActiveBorder:
-                                       return "activeborder";
                                case KnownColor.ActiveCaption:
-                                       return "activecaption";
+                               case KnownColor.AppWorkspace:
+                               case KnownColor.GrayText:
+                               case KnownColor.Highlight:
+                               case KnownColor.HighlightText:
+                               case KnownColor.InactiveBorder:
+                               case KnownColor.InactiveCaption:
+                               case KnownColor.InactiveCaptionText:
+                               case KnownColor.InfoText:
+                               case KnownColor.Menu:
+                               case KnownColor.MenuText:
+                               case KnownColor.ScrollBar:
+                               case KnownColor.Window:
+                               case KnownColor.WindowFrame:
+                               case KnownColor.WindowText:
+                                       return KnownColors.GetName (kc).ToLower 
(CultureInfo.InvariantCulture);
+
                                case KnownColor.ActiveCaptionText:
                                        return "captiontext";
-                               case KnownColor.AppWorkspace:
-                                       return "appworkspace";
                                case KnownColor.Control:
                                        return "buttonface";
                                case KnownColor.ControlDark:
@@ -126,64 +124,35 @@
                                        return "buttontext";
                                case KnownColor.Desktop:
                                        return "background";
-                               case KnownColor.GrayText:
-                                       return "graytext";
-                               case KnownColor.Highlight:
                                case KnownColor.HotTrack:
                                        return "highlight";
-                               case KnownColor.HighlightText:
-                                       return "highlighttext";
-                               case KnownColor.InactiveBorder:
-                                       return "inactiveborder";
-                               case KnownColor.InactiveCaption:
-                                       return "inactivecaption";
-                               case KnownColor.InactiveCaptionText:
-                                       return "inactivecaptiontext";
                                case KnownColor.Info:
                                        return "infobackground";
-                               case KnownColor.InfoText:
-                                       return "infotext";
-                               case KnownColor.Menu:
-                                       return "menu";
-                               case KnownColor.MenuText:
-                                       return "menutext";
-                               case KnownColor.ScrollBar:
-                                       return "scrollbar";
-                               case KnownColor.Window:
-                                       return "window";
-                               case KnownColor.WindowFrame:
-                                       return "windowframe";
-                               case KnownColor.WindowText:
-                                       return "windowtext";
+
                                default:
                                        return String.Empty;
                                }
                        }
 
                        if (c.IsNamedColor) {
-                               if (c == Color.LightGray) {
-                                       result =  "LightGrey";
-                               }
+                               if (c == Color.LightGray)
+                                       return "LightGrey";
                                else
-                                       result = c.Name;
+                                       return c.Name;
                        }
-                       else
-                               result = String.Format ("#{0:X2}{1:X2}{2:X2}", 
c.R, c.G, c.B);
 
-                       return result;
+                       return String.Format ("#{0:X2}{1:X2}{2:X2}", c.R, c.G, 
c.B);
                }
 
                public static int ToOle (Color c)
                {
                        // OleColor format is BGR, same as Win32
-
                        return  ((c.B << 16) | (c.G << 8) | c.R);
                }
 
                public static int ToWin32 (Color c)
                {
                        // Win32Color format is BGR, Same as OleColor
-
                        return  ((c.B << 16) | (c.G << 8) | c.R);
                }
        }

Modified: trunk/mcs/class/System.Drawing/System.Drawing/KnownColors.cs
===================================================================
--- trunk/mcs/class/System.Drawing/System.Drawing/KnownColors.cs        
2007-04-26 19:26:09 UTC (rev 76350)
+++ trunk/mcs/class/System.Drawing/System.Drawing/KnownColors.cs        
2007-04-26 19:58:52 UTC (rev 76351)
@@ -39,183 +39,183 @@
                {
                }
 #endif
-               static Color[] knownColors = new Color [] {
-                       Color.Empty,
-                       Color.FromArgbSystem (0xFF, 0xD4, 0xD0, 0xC8, 
"ActiveBorder", KnownColor.ActiveBorder), 
-                       Color.FromArgbSystem (0xFF, 0x00, 0x54, 0xE3, 
"ActiveCaption", KnownColor.ActiveCaption), 
-                       Color.FromArgbSystem (0xFF, 0xFF, 0xFF, 0xFF, 
"ActiveCaptionText", KnownColor.ActiveCaptionText), 
-                       Color.FromArgbSystem (0xFF, 0x80, 0x80, 0x80, 
"AppWorkspace", KnownColor.AppWorkspace), 
-                       Color.FromArgbSystem (0xFF, 0xEC, 0xE9, 0xD8, 
"Control", KnownColor.Control), 
-                       Color.FromArgbSystem (0xFF, 0xAC, 0xA8, 0x99, 
"ControlDark", KnownColor.ControlDark), 
-                       Color.FromArgbSystem (0xFF, 0x71, 0x6F, 0x64, 
"ControlDarkDark", KnownColor.ControlDarkDark), 
-                       Color.FromArgbSystem (0xFF, 0xF1, 0xEF, 0xE2, 
"ControlLight", KnownColor.ControlLight), 
-                       Color.FromArgbSystem (0xFF, 0xFF, 0xFF, 0xFF, 
"ControlLightLight", KnownColor.ControlLightLight), 
-                       Color.FromArgbSystem (0xFF, 0x00, 0x00, 0x00, 
"ControlText", KnownColor.ControlText), 
-                       Color.FromArgbSystem (0xFF, 0x00, 0x4E, 0x98, 
"Desktop", KnownColor.Desktop), 
-                       Color.FromArgbSystem (0xFF, 0xAC, 0xA8, 0x99, 
"GrayText", KnownColor.GrayText), 
-                       Color.FromArgbSystem (0xFF, 0x31, 0x6A, 0xC5, 
"Highlight", KnownColor.Highlight), 
-                       Color.FromArgbSystem (0xFF, 0xFF, 0xFF, 0xFF, 
"HighlightText", KnownColor.HighlightText), 
-                       Color.FromArgbSystem (0xFF, 0x00, 0x00, 0x80, 
"HotTrack", KnownColor.HotTrack), 
-                       Color.FromArgbSystem (0xFF, 0xD4, 0xD0, 0xC8, 
"InactiveBorder", KnownColor.InactiveBorder), 
-                       Color.FromArgbSystem (0xFF, 0x7A, 0x96, 0xDF, 
"InactiveCaption", KnownColor.InactiveCaption), 
-                       Color.FromArgbSystem (0xFF, 0xD8, 0xE4, 0xF8, 
"InactiveCaptionText", KnownColor.InactiveCaptionText), 
-                       Color.FromArgbSystem (0xFF, 0xFF, 0xFF, 0xE1, "Info", 
KnownColor.Info), 
-                       Color.FromArgbSystem (0xFF, 0x00, 0x00, 0x00, 
"InfoText", KnownColor.InfoText), 
-                       Color.FromArgbSystem (0xFF, 0xFF, 0xFF, 0xFF, "Menu", 
KnownColor.Menu), 
-                       Color.FromArgbSystem (0xFF, 0x00, 0x00, 0x00, 
"MenuText", KnownColor.MenuText), 
-                       Color.FromArgbSystem (0xFF, 0xD4, 0xD0, 0xC8, 
"ScrollBar", KnownColor.ScrollBar), 
-                       Color.FromArgbSystem (0xFF, 0xFF, 0xFF, 0xFF, "Window", 
KnownColor.Window), 
-                       Color.FromArgbSystem (0xFF, 0x00, 0x00, 0x00, 
"WindowFrame", KnownColor.WindowFrame), 
-                       Color.FromArgbSystem (0xFF, 0x00, 0x00, 0x00, 
"WindowText", KnownColor.WindowText), 
-                       Color.FromArgbNamed (0x00, 0xFF, 0xFF, 0xFF, 
"Transparent", KnownColor.Transparent), 
-                       Color.FromArgbNamed (0xFF, 0xF0, 0xF8, 0xFF, 
"AliceBlue", KnownColor.AliceBlue), 
-                       Color.FromArgbNamed (0xFF, 0xFA, 0xEB, 0xD7, 
"AntiqueWhite", KnownColor.AntiqueWhite), 
-                       Color.FromArgbNamed (0xFF, 0x00, 0xFF, 0xFF, "Aqua", 
KnownColor.Aqua), 
-                       Color.FromArgbNamed (0xFF, 0x7F, 0xFF, 0xD4, 
"Aquamarine", KnownColor.Aquamarine), 
-                       Color.FromArgbNamed (0xFF, 0xF0, 0xFF, 0xFF, "Azure", 
KnownColor.Azure), 
-                       Color.FromArgbNamed (0xFF, 0xF5, 0xF5, 0xDC, "Beige", 
KnownColor.Beige), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xE4, 0xC4, "Bisque", 
KnownColor.Bisque), 
-                       Color.FromArgbNamed (0xFF, 0x00, 0x00, 0x00, "Black", 
KnownColor.Black), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xEB, 0xCD, 
"BlanchedAlmond", KnownColor.BlanchedAlmond), 
-                       Color.FromArgbNamed (0xFF, 0x00, 0x00, 0xFF, "Blue", 
KnownColor.Blue), 
-                       Color.FromArgbNamed (0xFF, 0x8A, 0x2B, 0xE2, 
"BlueViolet", KnownColor.BlueViolet), 
-                       Color.FromArgbNamed (0xFF, 0xA5, 0x2A, 0x2A, "Brown", 
KnownColor.Brown), 
-                       Color.FromArgbNamed (0xFF, 0xDE, 0xB8, 0x87, 
"BurlyWood", KnownColor.BurlyWood), 
-                       Color.FromArgbNamed (0xFF, 0x5F, 0x9E, 0xA0, 
"CadetBlue", KnownColor.CadetBlue), 
-                       Color.FromArgbNamed (0xFF, 0x7F, 0xFF, 0x00, 
"Chartreuse", KnownColor.Chartreuse), 
-                       Color.FromArgbNamed (0xFF, 0xD2, 0x69, 0x1E, 
"Chocolate", KnownColor.Chocolate), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0x7F, 0x50, "Coral", 
KnownColor.Coral), 
-                       Color.FromArgbNamed (0xFF, 0x64, 0x95, 0xED, 
"CornflowerBlue", KnownColor.CornflowerBlue), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xF8, 0xDC, 
"Cornsilk", KnownColor.Cornsilk), 
-                       Color.FromArgbNamed (0xFF, 0xDC, 0x14, 0x3C, "Crimson", 
KnownColor.Crimson), 
-                       Color.FromArgbNamed (0xFF, 0x00, 0xFF, 0xFF, "Cyan", 
KnownColor.Cyan), 
-                       Color.FromArgbNamed (0xFF, 0x00, 0x00, 0x8B, 
"DarkBlue", KnownColor.DarkBlue), 
-                       Color.FromArgbNamed (0xFF, 0x00, 0x8B, 0x8B, 
"DarkCyan", KnownColor.DarkCyan), 
-                       Color.FromArgbNamed (0xFF, 0xB8, 0x86, 0x0B, 
"DarkGoldenrod", KnownColor.DarkGoldenrod), 
-                       Color.FromArgbNamed (0xFF, 0xA9, 0xA9, 0xA9, 
"DarkGray", KnownColor.DarkGray), 
-                       Color.FromArgbNamed (0xFF, 0x00, 0x64, 0x00, 
"DarkGreen", KnownColor.DarkGreen), 
-                       Color.FromArgbNamed (0xFF, 0xBD, 0xB7, 0x6B, 
"DarkKhaki", KnownColor.DarkKhaki), 
-                       Color.FromArgbNamed (0xFF, 0x8B, 0x00, 0x8B, 
"DarkMagenta", KnownColor.DarkMagenta), 
-                       Color.FromArgbNamed (0xFF, 0x55, 0x6B, 0x2F, 
"DarkOliveGreen", KnownColor.DarkOliveGreen), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0x8C, 0x00, 
"DarkOrange", KnownColor.DarkOrange), 
-                       Color.FromArgbNamed (0xFF, 0x99, 0x32, 0xCC, 
"DarkOrchid", KnownColor.DarkOrchid), 
-                       Color.FromArgbNamed (0xFF, 0x8B, 0x00, 0x00, "DarkRed", 
KnownColor.DarkRed), 
-                       Color.FromArgbNamed (0xFF, 0xE9, 0x96, 0x7A, 
"DarkSalmon", KnownColor.DarkSalmon), 
-                       Color.FromArgbNamed (0xFF, 0x8F, 0xBC, 0x8B, 
"DarkSeaGreen", KnownColor.DarkSeaGreen), 
-                       Color.FromArgbNamed (0xFF, 0x48, 0x3D, 0x8B, 
"DarkSlateBlue", KnownColor.DarkSlateBlue), 
-                       Color.FromArgbNamed (0xFF, 0x2F, 0x4F, 0x4F, 
"DarkSlateGray", KnownColor.DarkSlateGray), 
-                       Color.FromArgbNamed (0xFF, 0x00, 0xCE, 0xD1, 
"DarkTurquoise", KnownColor.DarkTurquoise), 
-                       Color.FromArgbNamed (0xFF, 0x94, 0x00, 0xD3, 
"DarkViolet", KnownColor.DarkViolet), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0x14, 0x93, 
"DeepPink", KnownColor.DeepPink), 
-                       Color.FromArgbNamed (0xFF, 0x00, 0xBF, 0xFF, 
"DeepSkyBlue", KnownColor.DeepSkyBlue), 
-                       Color.FromArgbNamed (0xFF, 0x69, 0x69, 0x69, "DimGray", 
KnownColor.DimGray), 
-                       Color.FromArgbNamed (0xFF, 0x1E, 0x90, 0xFF, 
"DodgerBlue", KnownColor.DodgerBlue), 
-                       Color.FromArgbNamed (0xFF, 0xB2, 0x22, 0x22, 
"Firebrick", KnownColor.Firebrick), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xFA, 0xF0, 
"FloralWhite", KnownColor.FloralWhite), 
-                       Color.FromArgbNamed (0xFF, 0x22, 0x8B, 0x22, 
"ForestGreen", KnownColor.ForestGreen), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0x00, 0xFF, "Fuchsia", 
KnownColor.Fuchsia), 
-                       Color.FromArgbNamed (0xFF, 0xDC, 0xDC, 0xDC, 
"Gainsboro", KnownColor.Gainsboro), 
-                       Color.FromArgbNamed (0xFF, 0xF8, 0xF8, 0xFF, 
"GhostWhite", KnownColor.GhostWhite), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xD7, 0x00, "Gold", 
KnownColor.Gold), 
-                       Color.FromArgbNamed (0xFF, 0xDA, 0xA5, 0x20, 
"Goldenrod", KnownColor.Goldenrod), 
-                       Color.FromArgbNamed (0xFF, 0x80, 0x80, 0x80, "Gray", 
KnownColor.Gray), 
-                       Color.FromArgbNamed (0xFF, 0x00, 0x80, 0x00, "Green", 
KnownColor.Green), 
-                       Color.FromArgbNamed (0xFF, 0xAD, 0xFF, 0x2F, 
"GreenYellow", KnownColor.GreenYellow), 
-                       Color.FromArgbNamed (0xFF, 0xF0, 0xFF, 0xF0, 
"Honeydew", KnownColor.Honeydew), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0x69, 0xB4, "HotPink", 
KnownColor.HotPink), 
-                       Color.FromArgbNamed (0xFF, 0xCD, 0x5C, 0x5C, 
"IndianRed", KnownColor.IndianRed), 
-                       Color.FromArgbNamed (0xFF, 0x4B, 0x00, 0x82, "Indigo", 
KnownColor.Indigo), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xFF, 0xF0, "Ivory", 
KnownColor.Ivory), 
-                       Color.FromArgbNamed (0xFF, 0xF0, 0xE6, 0x8C, "Khaki", 
KnownColor.Khaki), 
-                       Color.FromArgbNamed (0xFF, 0xE6, 0xE6, 0xFA, 
"Lavender", KnownColor.Lavender), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xF0, 0xF5, 
"LavenderBlush", KnownColor.LavenderBlush), 
-                       Color.FromArgbNamed (0xFF, 0x7C, 0xFC, 0x00, 
"LawnGreen", KnownColor.LawnGreen), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xFA, 0xCD, 
"LemonChiffon", KnownColor.LemonChiffon), 
-                       Color.FromArgbNamed (0xFF, 0xAD, 0xD8, 0xE6, 
"LightBlue", KnownColor.LightBlue), 
-                       Color.FromArgbNamed (0xFF, 0xF0, 0x80, 0x80, 
"LightCoral", KnownColor.LightCoral), 
-                       Color.FromArgbNamed (0xFF, 0xE0, 0xFF, 0xFF, 
"LightCyan", KnownColor.LightCyan), 
-                       Color.FromArgbNamed (0xFF, 0xFA, 0xFA, 0xD2, 
"LightGoldenrodYellow", KnownColor.LightGoldenrodYellow), 
-                       Color.FromArgbNamed (0xFF, 0xD3, 0xD3, 0xD3, 
"LightGray", KnownColor.LightGray), 
-                       Color.FromArgbNamed (0xFF, 0x90, 0xEE, 0x90, 
"LightGreen", KnownColor.LightGreen), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xB6, 0xC1, 
"LightPink", KnownColor.LightPink), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xA0, 0x7A, 
"LightSalmon", KnownColor.LightSalmon), 
-                       Color.FromArgbNamed (0xFF, 0x20, 0xB2, 0xAA, 
"LightSeaGreen", KnownColor.LightSeaGreen), 
-                       Color.FromArgbNamed (0xFF, 0x87, 0xCE, 0xFA, 
"LightSkyBlue", KnownColor.LightSkyBlue), 
-                       Color.FromArgbNamed (0xFF, 0x77, 0x88, 0x99, 
"LightSlateGray", KnownColor.LightSlateGray), 
-                       Color.FromArgbNamed (0xFF, 0xB0, 0xC4, 0xDE, 
"LightSteelBlue", KnownColor.LightSteelBlue), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xFF, 0xE0, 
"LightYellow", KnownColor.LightYellow), 
-                       Color.FromArgbNamed (0xFF, 0x00, 0xFF, 0x00, "Lime", 
KnownColor.Lime), 
-                       Color.FromArgbNamed (0xFF, 0x32, 0xCD, 0x32, 
"LimeGreen", KnownColor.LimeGreen), 
-                       Color.FromArgbNamed (0xFF, 0xFA, 0xF0, 0xE6, "Linen", 
KnownColor.Linen), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0x00, 0xFF, "Magenta", 
KnownColor.Magenta), 
-                       Color.FromArgbNamed (0xFF, 0x80, 0x00, 0x00, "Maroon", 
KnownColor.Maroon), 
-                       Color.FromArgbNamed (0xFF, 0x66, 0xCD, 0xAA, 
"MediumAquamarine", KnownColor.MediumAquamarine), 
-                       Color.FromArgbNamed (0xFF, 0x00, 0x00, 0xCD, 
"MediumBlue", KnownColor.MediumBlue), 
-                       Color.FromArgbNamed (0xFF, 0xBA, 0x55, 0xD3, 
"MediumOrchid", KnownColor.MediumOrchid), 
-                       Color.FromArgbNamed (0xFF, 0x93, 0x70, 0xDB, 
"MediumPurple", KnownColor.MediumPurple), 
-                       Color.FromArgbNamed (0xFF, 0x3C, 0xB3, 0x71, 
"MediumSeaGreen", KnownColor.MediumSeaGreen), 
-                       Color.FromArgbNamed (0xFF, 0x7B, 0x68, 0xEE, 
"MediumSlateBlue", KnownColor.MediumSlateBlue), 
-                       Color.FromArgbNamed (0xFF, 0x00, 0xFA, 0x9A, 
"MediumSpringGreen", KnownColor.MediumSpringGreen), 
-                       Color.FromArgbNamed (0xFF, 0x48, 0xD1, 0xCC, 
"MediumTurquoise", KnownColor.MediumTurquoise), 
-                       Color.FromArgbNamed (0xFF, 0xC7, 0x15, 0x85, 
"MediumVioletRed", KnownColor.MediumVioletRed), 
-                       Color.FromArgbNamed (0xFF, 0x19, 0x19, 0x70, 
"MidnightBlue", KnownColor.MidnightBlue), 
-                       Color.FromArgbNamed (0xFF, 0xF5, 0xFF, 0xFA, 
"MintCream", KnownColor.MintCream), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xE4, 0xE1, 
"MistyRose", KnownColor.MistyRose), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xE4, 0xB5, 
"Moccasin", KnownColor.Moccasin), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xDE, 0xAD, 
"NavajoWhite", KnownColor.NavajoWhite), 
-                       Color.FromArgbNamed (0xFF, 0x00, 0x00, 0x80, "Navy", 
KnownColor.Navy), 
-                       Color.FromArgbNamed (0xFF, 0xFD, 0xF5, 0xE6, "OldLace", 
KnownColor.OldLace), 
-                       Color.FromArgbNamed (0xFF, 0x80, 0x80, 0x00, "Olive", 
KnownColor.Olive), 
-                       Color.FromArgbNamed (0xFF, 0x6B, 0x8E, 0x23, 
"OliveDrab", KnownColor.OliveDrab), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xA5, 0x00, "Orange", 
KnownColor.Orange), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0x45, 0x00, 
"OrangeRed", KnownColor.OrangeRed), 
-                       Color.FromArgbNamed (0xFF, 0xDA, 0x70, 0xD6, "Orchid", 
KnownColor.Orchid), 
-                       Color.FromArgbNamed (0xFF, 0xEE, 0xE8, 0xAA, 
"PaleGoldenrod", KnownColor.PaleGoldenrod), 
-                       Color.FromArgbNamed (0xFF, 0x98, 0xFB, 0x98, 
"PaleGreen", KnownColor.PaleGreen), 
-                       Color.FromArgbNamed (0xFF, 0xAF, 0xEE, 0xEE, 
"PaleTurquoise", KnownColor.PaleTurquoise), 
-                       Color.FromArgbNamed (0xFF, 0xDB, 0x70, 0x93, 
"PaleVioletRed", KnownColor.PaleVioletRed), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xEF, 0xD5, 
"PapayaWhip", KnownColor.PapayaWhip), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xDA, 0xB9, 
"PeachPuff", KnownColor.PeachPuff), 
-                       Color.FromArgbNamed (0xFF, 0xCD, 0x85, 0x3F, "Peru", 
KnownColor.Peru), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xC0, 0xCB, "Pink", 
KnownColor.Pink), 
-                       Color.FromArgbNamed (0xFF, 0xDD, 0xA0, 0xDD, "Plum", 
KnownColor.Plum), 
-                       Color.FromArgbNamed (0xFF, 0xB0, 0xE0, 0xE6, 
"PowderBlue", KnownColor.PowderBlue), 
-                       Color.FromArgbNamed (0xFF, 0x80, 0x00, 0x80, "Purple", 
KnownColor.Purple), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0x00, 0x00, "Red", 
KnownColor.Red), 
-                       Color.FromArgbNamed (0xFF, 0xBC, 0x8F, 0x8F, 
"RosyBrown", KnownColor.RosyBrown), 
-                       Color.FromArgbNamed (0xFF, 0x41, 0x69, 0xE1, 
"RoyalBlue", KnownColor.RoyalBlue), 
-                       Color.FromArgbNamed (0xFF, 0x8B, 0x45, 0x13, 
"SaddleBrown", KnownColor.SaddleBrown), 
-                       Color.FromArgbNamed (0xFF, 0xFA, 0x80, 0x72, "Salmon", 
KnownColor.Salmon), 
-                       Color.FromArgbNamed (0xFF, 0xF4, 0xA4, 0x60, 
"SandyBrown", KnownColor.SandyBrown), 
-                       Color.FromArgbNamed (0xFF, 0x2E, 0x8B, 0x57, 
"SeaGreen", KnownColor.SeaGreen), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xF5, 0xEE, 
"SeaShell", KnownColor.SeaShell), 
-                       Color.FromArgbNamed (0xFF, 0xA0, 0x52, 0x2D, "Sienna", 
KnownColor.Sienna), 
-                       Color.FromArgbNamed (0xFF, 0xC0, 0xC0, 0xC0, "Silver", 
KnownColor.Silver), 
-                       Color.FromArgbNamed (0xFF, 0x87, 0xCE, 0xEB, "SkyBlue", 
KnownColor.SkyBlue), 
-                       Color.FromArgbNamed (0xFF, 0x6A, 0x5A, 0xCD, 
"SlateBlue", KnownColor.SlateBlue), 
-                       Color.FromArgbNamed (0xFF, 0x70, 0x80, 0x90, 
"SlateGray", KnownColor.SlateGray), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xFA, 0xFA, "Snow", 
KnownColor.Snow), 
-                       Color.FromArgbNamed (0xFF, 0x00, 0xFF, 0x7F, 
"SpringGreen", KnownColor.SpringGreen), 
-                       Color.FromArgbNamed (0xFF, 0x46, 0x82, 0xB4, 
"SteelBlue", KnownColor.SteelBlue), 
-                       Color.FromArgbNamed (0xFF, 0xD2, 0xB4, 0x8C, "Tan", 
KnownColor.Tan), 
-                       Color.FromArgbNamed (0xFF, 0x00, 0x80, 0x80, "Teal", 
KnownColor.Teal), 
-                       Color.FromArgbNamed (0xFF, 0xD8, 0xBF, 0xD8, "Thistle", 
KnownColor.Thistle), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0x63, 0x47, "Tomato", 
KnownColor.Tomato), 
-                       Color.FromArgbNamed (0xFF, 0x40, 0xE0, 0xD0, 
"Turquoise", KnownColor.Turquoise), 
-                       Color.FromArgbNamed (0xFF, 0xEE, 0x82, 0xEE, "Violet", 
KnownColor.Violet), 
-                       Color.FromArgbNamed (0xFF, 0xF5, 0xDE, 0xB3, "Wheat", 
KnownColor.Wheat), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xFF, 0xFF, "White", 
KnownColor.White), 
-                       Color.FromArgbNamed (0xFF, 0xF5, 0xF5, 0xF5, 
"WhiteSmoke", KnownColor.WhiteSmoke), 
-                       Color.FromArgbNamed (0xFF, 0xFF, 0xFF, 0x00, "Yellow", 
KnownColor.Yellow), 
-                       Color.FromArgbNamed (0xFF, 0x9A, 0xCD, 0x32, 
"YellowGreen", KnownColor.YellowGreen), 
+               static internal uint[] ArgbValues = new uint[] {
+                       0x00000000,     /* 000 - Empty */
+                       0xFFD4D0C8,     /* 001 - ActiveBorder */
+                       0xFF0054E3,     /* 002 - ActiveCaption */
+                       0xFFFFFFFF,     /* 003 - ActiveCaptionText */
+                       0xFF808080,     /* 004 - AppWorkspace */
+                       0xFFECE9D8,     /* 005 - Control */
+                       0xFFACA899,     /* 006 - ControlDark */
+                       0xFF716F64,     /* 007 - ControlDarkDark */
+                       0xFFF1EFE2,     /* 008 - ControlLight */
+                       0xFFFFFFFF,     /* 009 - ControlLightLight */
+                       0xFF000000,     /* 010 - ControlText */
+                       0xFF004E98,     /* 011 - Desktop */
+                       0xFFACA899,     /* 012 - GrayText */
+                       0xFF316AC5,     /* 013 - Highlight */
+                       0xFFFFFFFF,     /* 014 - HighlightText */
+                       0xFF000080,     /* 015 - HotTrack */
+                       0xFFD4D0C8,     /* 016 - InactiveBorder */
+                       0xFF7A96DF,     /* 017 - InactiveCaption */
+                       0xFFD8E4F8,     /* 018 - InactiveCaptionText */
+                       0xFFFFFFE1,     /* 019 - Info */
+                       0xFF000000,     /* 020 - InfoText */
+                       0xFFFFFFFF,     /* 021 - Menu */
+                       0xFF000000,     /* 022 - MenuText */
+                       0xFFD4D0C8,     /* 023 - ScrollBar */
+                       0xFFFFFFFF,     /* 024 - Window */
+                       0xFF000000,     /* 025 - WindowFrame */
+                       0xFF000000,     /* 026 - WindowText */
+                       0x00FFFFFF,     /* 027 - Transparent */
+                       0xFFF0F8FF,     /* 028 - AliceBlue */
+                       0xFFFAEBD7,     /* 029 - AntiqueWhite */
+                       0xFF00FFFF,     /* 030 - Aqua */
+                       0xFF7FFFD4,     /* 031 - Aquamarine */
+                       0xFFF0FFFF,     /* 032 - Azure */
+                       0xFFF5F5DC,     /* 033 - Beige */
+                       0xFFFFE4C4,     /* 034 - Bisque */
+                       0xFF000000,     /* 035 - Black */
+                       0xFFFFEBCD,     /* 036 - BlanchedAlmond */
+                       0xFF0000FF,     /* 037 - Blue */
+                       0xFF8A2BE2,     /* 038 - BlueViolet */
+                       0xFFA52A2A,     /* 039 - Brown */
+                       0xFFDEB887,     /* 040 - BurlyWood */
+                       0xFF5F9EA0,     /* 041 - CadetBlue */
+                       0xFF7FFF00,     /* 042 - Chartreuse */
+                       0xFFD2691E,     /* 043 - Chocolate */
+                       0xFFFF7F50,     /* 044 - Coral */
+                       0xFF6495ED,     /* 045 - CornflowerBlue */
+                       0xFFFFF8DC,     /* 046 - Cornsilk */
+                       0xFFDC143C,     /* 047 - Crimson */
+                       0xFF00FFFF,     /* 048 - Cyan */
+                       0xFF00008B,     /* 049 - DarkBlue */
+                       0xFF008B8B,     /* 050 - DarkCyan */
+                       0xFFB8860B,     /* 051 - DarkGoldenrod */
+                       0xFFA9A9A9,     /* 052 - DarkGray */
+                       0xFF006400,     /* 053 - DarkGreen */
+                       0xFFBDB76B,     /* 054 - DarkKhaki */
+                       0xFF8B008B,     /* 055 - DarkMagenta */
+                       0xFF556B2F,     /* 056 - DarkOliveGreen */
+                       0xFFFF8C00,     /* 057 - DarkOrange */
+                       0xFF9932CC,     /* 058 - DarkOrchid */
+                       0xFF8B0000,     /* 059 - DarkRed */
+                       0xFFE9967A,     /* 060 - DarkSalmon */
+                       0xFF8FBC8B,     /* 061 - DarkSeaGreen */
+                       0xFF483D8B,     /* 062 - DarkSlateBlue */
+                       0xFF2F4F4F,     /* 063 - DarkSlateGray */
+                       0xFF00CED1,     /* 064 - DarkTurquoise */
+                       0xFF9400D3,     /* 065 - DarkViolet */
+                       0xFFFF1493,     /* 066 - DeepPink */
+                       0xFF00BFFF,     /* 067 - DeepSkyBlue */
+                       0xFF696969,     /* 068 - DimGray */
+                       0xFF1E90FF,     /* 069 - DodgerBlue */
+                       0xFFB22222,     /* 070 - Firebrick */
+                       0xFFFFFAF0,     /* 071 - FloralWhite */
+                       0xFF228B22,     /* 072 - ForestGreen */
+                       0xFFFF00FF,     /* 073 - Fuchsia */
+                       0xFFDCDCDC,     /* 074 - Gainsboro */
+                       0xFFF8F8FF,     /* 075 - GhostWhite */
+                       0xFFFFD700,     /* 076 - Gold */
+                       0xFFDAA520,     /* 077 - Goldenrod */
+                       0xFF808080,     /* 078 - Gray */
+                       0xFF008000,     /* 079 - Green */
+                       0xFFADFF2F,     /* 080 - GreenYellow */
+                       0xFFF0FFF0,     /* 081 - Honeydew */
+                       0xFFFF69B4,     /* 082 - HotPink */
+                       0xFFCD5C5C,     /* 083 - IndianRed */
+                       0xFF4B0082,     /* 084 - Indigo */
+                       0xFFFFFFF0,     /* 085 - Ivory */
+                       0xFFF0E68C,     /* 086 - Khaki */
+                       0xFFE6E6FA,     /* 087 - Lavender */
+                       0xFFFFF0F5,     /* 088 - LavenderBlush */
+                       0xFF7CFC00,     /* 089 - LawnGreen */
+                       0xFFFFFACD,     /* 090 - LemonChiffon */
+                       0xFFADD8E6,     /* 091 - LightBlue */
+                       0xFFF08080,     /* 092 - LightCoral */
+                       0xFFE0FFFF,     /* 093 - LightCyan */
+                       0xFFFAFAD2,     /* 094 - LightGoldenrodYellow */
+                       0xFFD3D3D3,     /* 095 - LightGray */
+                       0xFF90EE90,     /* 096 - LightGreen */
+                       0xFFFFB6C1,     /* 097 - LightPink */
+                       0xFFFFA07A,     /* 098 - LightSalmon */
+                       0xFF20B2AA,     /* 099 - LightSeaGreen */
+                       0xFF87CEFA,     /* 100 - LightSkyBlue */
+                       0xFF778899,     /* 101 - LightSlateGray */
+                       0xFFB0C4DE,     /* 102 - LightSteelBlue */
+                       0xFFFFFFE0,     /* 103 - LightYellow */
+                       0xFF00FF00,     /* 104 - Lime */
+                       0xFF32CD32,     /* 105 - LimeGreen */
+                       0xFFFAF0E6,     /* 106 - Linen */
+                       0xFFFF00FF,     /* 107 - Magenta */
+                       0xFF800000,     /* 108 - Maroon */
+                       0xFF66CDAA,     /* 109 - MediumAquamarine */
+                       0xFF0000CD,     /* 110 - MediumBlue */
+                       0xFFBA55D3,     /* 111 - MediumOrchid */
+                       0xFF9370DB,     /* 112 - MediumPurple */
+                       0xFF3CB371,     /* 113 - MediumSeaGreen */
+                       0xFF7B68EE,     /* 114 - MediumSlateBlue */
+                       0xFF00FA9A,     /* 115 - MediumSpringGreen */
+                       0xFF48D1CC,     /* 116 - MediumTurquoise */
+                       0xFFC71585,     /* 117 - MediumVioletRed */
+                       0xFF191970,     /* 118 - MidnightBlue */
+                       0xFFF5FFFA,     /* 119 - MintCream */
+                       0xFFFFE4E1,     /* 120 - MistyRose */
+                       0xFFFFE4B5,     /* 121 - Moccasin */
+                       0xFFFFDEAD,     /* 122 - NavajoWhite */
+                       0xFF000080,     /* 123 - Navy */
+                       0xFFFDF5E6,     /* 124 - OldLace */
+                       0xFF808000,     /* 125 - Olive */
+                       0xFF6B8E23,     /* 126 - OliveDrab */
+                       0xFFFFA500,     /* 127 - Orange */
+                       0xFFFF4500,     /* 128 - OrangeRed */
+                       0xFFDA70D6,     /* 129 - Orchid */
+                       0xFFEEE8AA,     /* 130 - PaleGoldenrod */
+                       0xFF98FB98,     /* 131 - PaleGreen */
+                       0xFFAFEEEE,     /* 132 - PaleTurquoise */
+                       0xFFDB7093,     /* 133 - PaleVioletRed */
+                       0xFFFFEFD5,     /* 134 - PapayaWhip */
+                       0xFFFFDAB9,     /* 135 - PeachPuff */
+                       0xFFCD853F,     /* 136 - Peru */
+                       0xFFFFC0CB,     /* 137 - Pink */
+                       0xFFDDA0DD,     /* 138 - Plum */
+                       0xFFB0E0E6,     /* 139 - PowderBlue */
+                       0xFF800080,     /* 140 - Purple */
+                       0xFFFF0000,     /* 141 - Red */
+                       0xFFBC8F8F,     /* 142 - RosyBrown */
+                       0xFF4169E1,     /* 143 - RoyalBlue */
+                       0xFF8B4513,     /* 144 - SaddleBrown */
+                       0xFFFA8072,     /* 145 - Salmon */
+                       0xFFF4A460,     /* 146 - SandyBrown */
+                       0xFF2E8B57,     /* 147 - SeaGreen */
+                       0xFFFFF5EE,     /* 148 - SeaShell */
+                       0xFFA0522D,     /* 149 - Sienna */
+                       0xFFC0C0C0,     /* 150 - Silver */
+                       0xFF87CEEB,     /* 151 - SkyBlue */
+                       0xFF6A5ACD,     /* 152 - SlateBlue */
+                       0xFF708090,     /* 153 - SlateGray */
+                       0xFFFFFAFA,     /* 154 - Snow */
+                       0xFF00FF7F,     /* 155 - SpringGreen */
+                       0xFF4682B4,     /* 156 - SteelBlue */
+                       0xFFD2B48C,     /* 157 - Tan */
+                       0xFF008080,     /* 158 - Teal */
+                       0xFFD8BFD8,     /* 159 - Thistle */
+                       0xFFFF6347,     /* 160 - Tomato */
+                       0xFF40E0D0,     /* 161 - Turquoise */
+                       0xFFEE82EE,     /* 162 - Violet */
+                       0xFFF5DEB3,     /* 163 - Wheat */
+                       0xFFFFFFFF,     /* 164 - White */
+                       0xFFF5F5F5,     /* 165 - WhiteSmoke */
+                       0xFFFFFF00,     /* 166 - Yellow */
+                       0xFF9ACD32,     /* 167 - YellowGreen */
 #if NET_2_0
-                       Color.FromArgbSystem (0xFF, 0xEC, 0xE9, 0xD8, 
"ButtonFace", KnownColor.ButtonFace), 
-                       Color.FromArgbSystem (0xFF, 0xFF, 0xFF, 0xFF, 
"ButtonHighlight", KnownColor.ButtonHighlight), 
-                       Color.FromArgbSystem (0xFF, 0xAC, 0xA8, 0x99, 
"ButtonShadow", KnownColor.ButtonShadow), 
-                       Color.FromArgbSystem (0xFF, 0x3D, 0x95, 0xFF, 
"GradientActiveCaption", KnownColor.GradientActiveCaption), 
-                       Color.FromArgbSystem (0xFF, 0x9D, 0xB9, 0xEB, 
"GradientInactiveCaption", KnownColor.GradientInactiveCaption), 
-                       Color.FromArgbSystem (0xFF, 0xEC, 0xE9, 0xD8, 
"MenuBar", KnownColor.MenuBar), 
-                       Color.FromArgbSystem (0xFF, 0x31, 0x6A, 0xC5, 
"MenuHighlight", KnownColor.MenuHighlight), 
+                       0xFFECE9D8,     /* 168 - ButtonFace */
+                       0xFFFFFFFF,     /* 169 - ButtonHighlight */
+                       0xFFACA899,     /* 170 - ButtonShadow */
+                       0xFF3D95FF,     /* 171 - GradientActiveCaption */
+                       0xFF9DB9EB,     /* 172 - GradientInactiveCaption */
+                       0xFFECE9D8,     /* 173 - MenuBar */
+                       0xFF316AC5,     /* 174 - MenuHighlight */
 #endif
                };
 
@@ -223,83 +223,279 @@
                {
                        if (GDIPlus.RunningOnWindows ()) {
                                // If we're on Windows we should behave like MS 
and pull the colors
-                               InitOnWindows ();
+                               RetrieveWindowsSystemColors ();
                        }
+                       // note: Mono's SWF Theme class will call the static 
Update method to apply
+                       // correct system colors outside Windows
                }
 
-               private static void SetWindowsColor (GetSysColorIndex index, 
string name, KnownColor knownColor)
+               static void RetrieveWindowsSystemColors ()
                {
-                       uint rgb = GDIPlus.Win32GetSysColor (index);
-                       Color color = Color.FromArgbSystem (255, (byte)rgb, 
(byte)(rgb >> 8), (byte)(rgb >> 16), name, knownColor);
-                       knownColors [(int)knownColor] = color;
-               }
-
-               static void InitOnWindows ()
-               {
-                       SetWindowsColor (GetSysColorIndex.COLOR_ACTIVEBORDER, 
"ActiveBorder", KnownColor.ActiveBorder);
-                       SetWindowsColor (GetSysColorIndex.COLOR_ACTIVECAPTION, 
"ActiveCaption", KnownColor.ActiveCaption);
-                       SetWindowsColor (GetSysColorIndex.COLOR_CAPTIONTEXT, 
"ActiveCaptionText", KnownColor.ActiveCaptionText);
-                       SetWindowsColor (GetSysColorIndex.COLOR_APPWORKSPACE, 
"AppWorkspace", KnownColor.AppWorkspace);
-                       SetWindowsColor (GetSysColorIndex.COLOR_BTNFACE, 
"Control", KnownColor.Control);
-                       SetWindowsColor (GetSysColorIndex.COLOR_BTNSHADOW, 
"ControlDark", KnownColor.ControlDark);
-                       SetWindowsColor (GetSysColorIndex.COLOR_3DDKSHADOW, 
"ControlDarkDark", KnownColor.ControlDarkDark);
-                       SetWindowsColor (GetSysColorIndex.COLOR_3DLIGHT, 
"ControlLight", KnownColor.ControlLight);
-                       SetWindowsColor (GetSysColorIndex.COLOR_BTNHIGHLIGHT, 
"ControlLightLight", KnownColor.ControlLightLight);
-                       SetWindowsColor (GetSysColorIndex.COLOR_BTNTEXT, 
"ControlText", KnownColor.ControlText);
-                       SetWindowsColor (GetSysColorIndex.COLOR_DESKTOP, 
"Desktop", KnownColor.Desktop);
-                       SetWindowsColor (GetSysColorIndex.COLOR_GRAYTEXT, 
"GrayText", KnownColor.GrayText);
-                       SetWindowsColor (GetSysColorIndex.COLOR_HIGHLIGHT, 
"Highlight", KnownColor.Highlight);
-                       SetWindowsColor (GetSysColorIndex.COLOR_HIGHLIGHTTEXT, 
"HighlightText", KnownColor.HighlightText);
-                       SetWindowsColor (GetSysColorIndex.COLOR_HOTLIGHT, 
"HotTrack", KnownColor.HotTrack);
-                       SetWindowsColor (GetSysColorIndex.COLOR_INACTIVEBORDER, 
"InactiveBorder", KnownColor.InactiveBorder);
-                       SetWindowsColor 
(GetSysColorIndex.COLOR_INACTIVECAPTION, "InactiveCaption", 
KnownColor.InactiveCaption);
-                       SetWindowsColor 
(GetSysColorIndex.COLOR_INACTIVECAPTIONTEXT, "InactiveCaptionText", 
KnownColor.InactiveCaptionText);
-                       SetWindowsColor (GetSysColorIndex.COLOR_INFOBK, "Info", 
KnownColor.Info);
-                       SetWindowsColor (GetSysColorIndex.COLOR_INFOTEXT, 
"InfoText", KnownColor.InfoText);
-                       SetWindowsColor (GetSysColorIndex.COLOR_MENU, "Menu", 
KnownColor.Menu);
-                       SetWindowsColor (GetSysColorIndex.COLOR_MENUTEXT, 
"MenuText", KnownColor.MenuText);
-                       SetWindowsColor (GetSysColorIndex.COLOR_SCROLLBAR, 
"ScrollBar", KnownColor.ScrollBar);
-                       SetWindowsColor (GetSysColorIndex.COLOR_WINDOW, 
"Window", KnownColor.Window);
-                       SetWindowsColor (GetSysColorIndex.COLOR_WINDOWFRAME, 
"WindowFrame", KnownColor.WindowFrame);
-                       SetWindowsColor (GetSysColorIndex.COLOR_WINDOWTEXT, 
"WindowText", KnownColor.WindowText);
+                       ArgbValues [(int)KnownColor.ActiveBorder] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_ACTIVEBORDER);
+                       ArgbValues [(int)KnownColor.ActiveCaption] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_ACTIVECAPTION);
+                       ArgbValues [(int)KnownColor.ActiveCaptionText] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_CAPTIONTEXT);
+                       ArgbValues [(int)KnownColor.AppWorkspace] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_APPWORKSPACE);
+                       ArgbValues [(int)KnownColor.Control] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_BTNFACE);
+                       ArgbValues [(int)KnownColor.ControlDark] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_BTNSHADOW);
+                       ArgbValues [(int)KnownColor.ControlDarkDark] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_3DDKSHADOW);
+                       ArgbValues [(int)KnownColor.ControlLight] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_3DLIGHT);
+                       ArgbValues [(int)KnownColor.ControlLightLight] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_BTNHIGHLIGHT);
+                       ArgbValues [(int)KnownColor.ControlText] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_BTNTEXT);
+                       ArgbValues [(int)KnownColor.Desktop] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_DESKTOP);
+                       ArgbValues [(int)KnownColor.GrayText] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_GRAYTEXT);
+                       ArgbValues [(int)KnownColor.Highlight] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_HIGHLIGHT);
+                       ArgbValues [(int)KnownColor.HighlightText] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_HIGHLIGHTTEXT);
+                       ArgbValues [(int)KnownColor.HotTrack] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_HOTLIGHT);
+                       ArgbValues [(int)KnownColor.InactiveBorder] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_INACTIVEBORDER);
+                       ArgbValues [(int)KnownColor.InactiveCaption] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_INACTIVECAPTION);
+                       ArgbValues [(int)KnownColor.InactiveCaptionText] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_INACTIVECAPTIONTEXT);
+                       ArgbValues [(int)KnownColor.Info] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_INFOBK);
+                       ArgbValues [(int)KnownColor.InfoText] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_INFOTEXT);
+                       ArgbValues [(int)KnownColor.Menu] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_MENU);
+                       ArgbValues [(int)KnownColor.MenuText] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_MENUTEXT);
+                       ArgbValues [(int)KnownColor.ScrollBar] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_SCROLLBAR);
+                       ArgbValues [(int)KnownColor.Window] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_WINDOW);
+                       ArgbValues [(int)KnownColor.WindowFrame] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_WINDOWFRAME);
+                       ArgbValues [(int)KnownColor.WindowText] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_WINDOWTEXT);
 #if NET_2_0
-                       SetWindowsColor (GetSysColorIndex.COLOR_BTNFACE, 
"ButtonFace", KnownColor.ButtonFace);
-                       SetWindowsColor (GetSysColorIndex.COLOR_BTNHIGHLIGHT, 
"ButtonHighlight", KnownColor.ButtonHighlight);
-                       SetWindowsColor (GetSysColorIndex.COLOR_BTNSHADOW, 
"ButtonShadow", KnownColor.ButtonShadow);
-                       SetWindowsColor 
(GetSysColorIndex.COLOR_GRADIENTACTIVECAPTION, "GradientActiveCaption", 
KnownColor.GradientActiveCaption);
-                       SetWindowsColor 
(GetSysColorIndex.COLOR_GRADIENTINACTIVECAPTION, "GradientInactiveCaption", 
KnownColor.GradientInactiveCaption);
-                       SetWindowsColor (GetSysColorIndex.COLOR_MENUBAR, 
"MenuBar", KnownColor.MenuBar);
-                       SetWindowsColor (GetSysColorIndex.COLOR_MENUHIGHLIGHT, 
"MenuHighlight", KnownColor.MenuHighlight);
+                       ArgbValues [(int)KnownColor.ButtonFace] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_BTNFACE);
+                       ArgbValues [(int)KnownColor.ButtonHighlight] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_BTNHIGHLIGHT);
+                       ArgbValues [(int)KnownColor.ButtonShadow] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_BTNSHADOW);
+                       ArgbValues [(int)KnownColor.GradientActiveCaption] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_GRADIENTACTIVECAPTION);
+                       ArgbValues [(int)KnownColor.GradientInactiveCaption] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_GRADIENTINACTIVECAPTION);
+                       ArgbValues [(int)KnownColor.MenuBar] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_MENUBAR);
+                       ArgbValues [(int)KnownColor.MenuHighlight] = 
GDIPlus.Win32GetSysColor (GetSysColorIndex.COLOR_MENUHIGHLIGHT);
 #endif
                }
 
-               public static Color[] Values {
-                       get { return knownColors; }
-               }
-
                public static Color FromKnownColor (KnownColor kc)
                {
-                       int n = (int)kc;
-                       if ((n <= 0) || (n >= knownColors.Length)) {
+                       Color c;
+                       short n = (short)kc;
+                       if ((n <= 0) || (n >= ArgbValues.Length)) {
                                // This is what it returns!
-                               Color c = Color.FromArgb (0, 0, 0, 0);
+                               c = Color.FromArgb (0, 0, 0, 0);
+#if ONLY_1_1
                                c.name = kc.ToString ();
+#endif
                                c.state |= (short) Color.ColorType.Named;
-                               c.knownColor = (short) kc;
-                               return c;
+                       } else {
+                               c = new Color ();
+                               c.state = (short) (Color.ColorType.ARGB | 
Color.ColorType.Known | Color.ColorType.Named);
+                               if ((n < 27) || (n > 169))
+                                       c.state |= (short) 
Color.ColorType.System;
+                               c.value = ArgbValues [n];
+#if ONLY_1_1
+                               c.name = GetName (n);
+#endif
                        }
-                       return knownColors [n];
+                       c.knownColor = n;
+                       return c;
                }
 
+               public static string GetName (short kc)
+               {
+                       switch (kc) {
+                       case 1:         return "ActiveBorder";
+                       case 2:         return "ActiveCaption";
+                       case 3:         return "ActiveCaptionText";
+                       case 4:         return "AppWorkspace";
+                       case 5:         return "Control";
+                       case 6:         return "ControlDark";
+                       case 7:         return "ControlDarkDark";
+                       case 8:         return "ControlLight";
+                       case 9:         return "ControlLightLight";
+                       case 10:        return "ControlText";
+                       case 11:        return "Desktop";
+                       case 12:        return "GrayText";
+                       case 13:        return "Highlight";
+                       case 14:        return "HighlightText";
+                       case 15:        return "HotTrack";
+                       case 16:        return "InactiveBorder";
+                       case 17:        return "InactiveCaption";
+                       case 18:        return "InactiveCaptionText";
+                       case 19:        return "Info";
+                       case 20:        return "InfoText";
+                       case 21:        return "Menu";
+                       case 22:        return "MenuText";
+                       case 23:        return "ScrollBar";
+                       case 24:        return "Window";
+                       case 25:        return "WindowFrame";
+                       case 26:        return "WindowText";
+                       case 27:        return "Transparent";
+                       case 28:        return "AliceBlue";
+                       case 29:        return "AntiqueWhite";
+                       case 30:        return "Aqua";
+                       case 31:        return "Aquamarine";
+                       case 32:        return "Azure";
+                       case 33:        return "Beige";
+                       case 34:        return "Bisque";
+                       case 35:        return "Black";
+                       case 36:        return "BlanchedAlmond";
+                       case 37:        return "Blue";
+                       case 38:        return "BlueViolet";
+                       case 39:        return "Brown";
+                       case 40:        return "BurlyWood";
+                       case 41:        return "CadetBlue";
+                       case 42:        return "Chartreuse";
+                       case 43:        return "Chocolate";
+                       case 44:        return "Coral";
+                       case 45:        return "CornflowerBlue";
+                       case 46:        return "Cornsilk";
+                       case 47:        return "Crimson";
+                       case 48:        return "Cyan";
+                       case 49:        return "DarkBlue";
+                       case 50:        return "DarkCyan";
+                       case 51:        return "DarkGoldenrod";
+                       case 52:        return "DarkGray";
+                       case 53:        return "DarkGreen";
+                       case 54:        return "DarkKhaki";
+                       case 55:        return "DarkMagenta";
+                       case 56:        return "DarkOliveGreen";
+                       case 57:        return "DarkOrange";
+                       case 58:        return "DarkOrchid";
+                       case 59:        return "DarkRed";
+                       case 60:        return "DarkSalmon";
+                       case 61:        return "DarkSeaGreen";
+                       case 62:        return "DarkSlateBlue";
+                       case 63:        return "DarkSlateGray";
+                       case 64:        return "DarkTurquoise";
+                       case 65:        return "DarkViolet";
+                       case 66:        return "DeepPink";
+                       case 67:        return "DeepSkyBlue";
+                       case 68:        return "DimGray";
+                       case 69:        return "DodgerBlue";
+                       case 70:        return "Firebrick";
+                       case 71:        return "FloralWhite";
+                       case 72:        return "ForestGreen";
+                       case 73:        return "Fuchsia";
+                       case 74:        return "Gainsboro";
+                       case 75:        return "GhostWhite";
+                       case 76:        return "Gold";
+                       case 77:        return "Goldenrod";
+                       case 78:        return "Gray";
+                       case 79:        return "Green";
+                       case 80:        return "GreenYellow";
+                       case 81:        return "Honeydew";
+                       case 82:        return "HotPink";
+                       case 83:        return "IndianRed";
+                       case 84:        return "Indigo";
+                       case 85:        return "Ivory";
+                       case 86:        return "Khaki";
+                       case 87:        return "Lavender";
+                       case 88:        return "LavenderBlush";
+                       case 89:        return "LawnGreen";
+                       case 90:        return "LemonChiffon";
+                       case 91:        return "LightBlue";
+                       case 92:        return "LightCoral";
+                       case 93:        return "LightCyan";
+                       case 94:        return "LightGoldenrodYellow";
+                       case 95:        return "LightGray";
+                       case 96:        return "LightGreen";
+                       case 97:        return "LightPink";
+                       case 98:        return "LightSalmon";
+                       case 99:        return "LightSeaGreen";
+                       case 100:       return "LightSkyBlue";
+                       case 101:       return "LightSlateGray";
+                       case 102:       return "LightSteelBlue";
+                       case 103:       return "LightYellow";
+                       case 104:       return "Lime";
+                       case 105:       return "LimeGreen";
+                       case 106:       return "Linen";
+                       case 107:       return "Magenta";
+                       case 108:       return "Maroon";
+                       case 109:       return "MediumAquamarine";
+                       case 110:       return "MediumBlue";
+                       case 111:       return "MediumOrchid";
+                       case 112:       return "MediumPurple";
+                       case 113:       return "MediumSeaGreen";
+                       case 114:       return "MediumSlateBlue";
+                       case 115:       return "MediumSpringGreen";
+                       case 116:       return "MediumTurquoise";
+                       case 117:       return "MediumVioletRed";
+                       case 118:       return "MidnightBlue";
+                       case 119:       return "MintCream";
+                       case 120:       return "MistyRose";
+                       case 121:       return "Moccasin";
+                       case 122:       return "NavajoWhite";
+                       case 123:       return "Navy";
+                       case 124:       return "OldLace";
+                       case 125:       return "Olive";
+                       case 126:       return "OliveDrab";
+                       case 127:       return "Orange";
+                       case 128:       return "OrangeRed";
+                       case 129:       return "Orchid";
+                       case 130:       return "PaleGoldenrod";
+                       case 131:       return "PaleGreen";
+                       case 132:       return "PaleTurquoise";
+                       case 133:       return "PaleVioletRed";
+                       case 134:       return "PapayaWhip";
+                       case 135:       return "PeachPuff";
+                       case 136:       return "Peru";
+                       case 137:       return "Pink";
+                       case 138:       return "Plum";
+                       case 139:       return "PowderBlue";
+                       case 140:       return "Purple";
+                       case 141:       return "Red";
+                       case 142:       return "RosyBrown";
+                       case 143:       return "RoyalBlue";
+                       case 144:       return "SaddleBrown";
+                       case 145:       return "Salmon";
+                       case 146:       return "SandyBrown";
+                       case 147:       return "SeaGreen";
+                       case 148:       return "SeaShell";
+                       case 149:       return "Sienna";
+                       case 150:       return "Silver";
+                       case 151:       return "SkyBlue";
+                       case 152:       return "SlateBlue";
+                       case 153:       return "SlateGray";
+                       case 154:       return "Snow";
+                       case 155:       return "SpringGreen";
+                       case 156:       return "SteelBlue";
+                       case 157:       return "Tan";
+                       case 158:       return "Teal";
+                       case 159:       return "Thistle";
+                       case 160:       return "Tomato";
+                       case 161:       return "Turquoise";
+                       case 162:       return "Violet";
+                       case 163:       return "Wheat";
+                       case 164:       return "White";
+                       case 165:       return "WhiteSmoke";
+                       case 166:       return "Yellow";
+                       case 167:       return "YellowGreen";
+#if NET_2_0
+                       case 168:       return "ButtonFace";
+                       case 169:       return "ButtonHighlight";
+                       case 170:       return "ButtonShadow";
+                       case 171:       return "GradientActiveCaption";
+                       case 172:       return "GradientInactiveCaption";
+                       case 173:       return "MenuBar";
+                       case 174:       return "MenuHighlight";
+#endif
+                       default:        return String.Empty;
+                       }
+               }
+
+               public static string GetName (KnownColor kc)
+               {
+                       return GetName ((short)kc);
+               }
+
+               public static Color FindColorMatch (Color c)
+               {
+                       uint argb = (uint) c.ToArgb ();
+                       for (int i = 0; i < KnownColors.ArgbValues.Length; i++) 
{
+                               if (argb == KnownColors.ArgbValues [i])
+                                       return KnownColors.FromKnownColor 
((KnownColor)i);
+                        }
+                       return Color.Empty;
+               }
+
                // When this method is called, we teach any new color(s) to the 
Color class
                // NOTE: This is called (reflection) by 
System.Windows.Forms.Theme (this isn't dead code)
-               public static Color Update (int knownColor, int color)
+               public static void Update (int knownColor, uint color)
                {
-                       Color c = knownColors[knownColor];
-                       c.state = (short) (Color.ColorType.ARGB | 
Color.ColorType.Known | Color.ColorType.Named | Color.ColorType.System);
-                       c.value = color;
-                       knownColors[knownColor] = c;
-                       return c;
+                       ArgbValues[knownColor] = color;
                }
        }
 }

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to