X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.Drawing%2FSystem.Drawing%2FColorTranslator.cs;h=27e5959c353e359dce985ef0d204f47252b4278b;hb=fe8bdbcef723fc8c92afcc822aa4c12e34c21c0b;hp=ac639f62162c3c6499ee723f113a572d8439e1bd;hpb=323a570906ba064802110c4af27da0182e0ff877;p=mono.git diff --git a/mcs/class/System.Drawing/System.Drawing/ColorTranslator.cs b/mcs/class/System.Drawing/System.Drawing/ColorTranslator.cs index ac639f62162..27e5959c353 100644 --- a/mcs/class/System.Drawing/System.Drawing/ColorTranslator.cs +++ b/mcs/class/System.Drawing/System.Drawing/ColorTranslator.cs @@ -1,95 +1,190 @@ -// -// System.Drawing.ColorTranslator.cs -// -// (C) 2001 Ximian, Inc. http://www.ximian.com -// -// Dennis Hayes (dennish@raytek.com) -// Inital Implimentation 3/25/2002 -// All conversions based on best guess, will improve over time -// -using System; -namespace System.Drawing { - public class ColorTranslator{ - // From converisons - /// - /// - /// - /// - /// - public static Color FromHtml(string HtmlFromColor){ - // TODO: - // If first char is "#" - //convert "#RRGGBB" to int and use Color.FromARGB(int) to create color - // else //it is a color name - //If there is a single digit at the end of the name, remove it. - // Call Color.FromKnownColor(HtmlFromColor) - - //At least some Html strings match .NET Colors, - // so this should work for those colors. - // .NET colors, XWindows colors, and WWWC web colors - // are (according to Charles Pretziod) base the same - //colors, so many shouold work if any do. - return Color.FromKnownColor(HtmlFromColor); - } - - /// - /// - /// - /// - /// - public static Color FromOle(int OLEFromColor){ - int newcolor; - //TODO: swap RB bytes i.e. AARRGGBB to AABBGGRR - return Color.FromArgb(newcolor); - } - - /// - /// - /// - /// - /// - public static Color FromWin32(int Win32FromColor){ - int newcolor; - //TODO: swap RB bytes i.e. AARRGGBB to AABBGGRR - return Color.FromArgb(newcolor); - } - - // To converisons - public static string ToHtml(Color HtmlToColor){ - //TODO: html string for unknown color is "#rrgggbb" in hex format. - //TODO: first pass use same for known color. - //TODO: second pass return name string for known colors. - string returnstring; - if(HtmlToColor.IsKnownColor){ - } - else{ - } - return Color.FromKnownColor(HtmlToColor); - } - /// - /// converts from BGR to RGB - /// - /// - /// - public static int ToOle(Color FromColor){ - // TODO: Swap red and blue(from argb), convert to int(toargb) - // Same as ToWin32 - return (Color.FromArgb(FromColor.B,FromColor.G,FromColor.R)).ToArgb(); - } - - /// - /// converts from RGB to BGR - /// - /// - /// - public static int ToWin32(Color FromColor){ - // TODO: Swap red and blue(from argb), convert to int(toargb) - // Same as ToOle - return (Color.FromArgb(FromColor.B,FromColor.G,FromColor.R)).ToArgb(); - } - } -} - - - - +// +// System.Drawing.ColorTranslator.cs +// +// Authors: +// Dennis Hayes (dennish@raytek.com) +// Ravindra (rkumar@novell.com) +// Sebastien Pouliot +// +// Copyright (C) 2001 Ximian, Inc. http://www.ximian.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 +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +using System.ComponentModel; +using System.Globalization; + +namespace System.Drawing { + + public sealed class ColorTranslator { + + private ColorTranslator () + { + } + + public static Color FromHtml (string htmlColor) + { + if ((htmlColor == null) || (htmlColor.Length == 0)) + return Color.Empty; + + switch (htmlColor.ToLowerInvariant ()) { + case "buttonface": + case "threedface": + return SystemColors.Control; + case "buttonhighlight": + case "threedlightshadow": + return SystemColors.ControlLightLight; + case "buttonshadow": + return SystemColors.ControlDark; + case "captiontext": + return SystemColors.ActiveCaptionText; + case "threeddarkshadow": + return SystemColors.ControlDarkDark; + case "threedhighlight": + return SystemColors.ControlLight; + case "background": + return SystemColors.Desktop; + case "buttontext": + return SystemColors.ControlText; + case "infobackground": + return SystemColors.Info; + // special case for Color.LightGray versus html's LightGrey (#340917) + case "lightgrey": + return Color.LightGray; + } + + TypeConverter converter = TypeDescriptor.GetConverter (typeof (Color)); + 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 + return FromBGR (oleColor); + } + + public static Color FromWin32 (int win32Color) + { + // Win32Color format is BGR + return FromBGR (win32Color); + } + + public static string ToHtml (Color c) + { + if (c.IsEmpty) + return String.Empty; + + if (c.IsSystemColor) { + KnownColor kc = c.ToKnownColor (); + switch (kc) { + case KnownColor.ActiveBorder: + case KnownColor.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.Control: + return "buttonface"; + case KnownColor.ControlDark: + return "buttonshadow"; + case KnownColor.ControlDarkDark: + return "threeddarkshadow"; + case KnownColor.ControlLight: + return "buttonface"; + case KnownColor.ControlLightLight: + return "buttonhighlight"; + case KnownColor.ControlText: + return "buttontext"; + case KnownColor.Desktop: + return "background"; + case KnownColor.HotTrack: + return "highlight"; + case KnownColor.Info: + return "infobackground"; + + default: + return String.Empty; + } + } + + if (c.IsNamedColor) { + if (c == Color.LightGray) + return "LightGrey"; + else + return c.Name; + } + + return FormatHtml (c.R, c.G, c.B); + } + + static char GetHexNumber (int b) + { + return (char) (b > 9 ? 55 + b : 48 + b); + } + + static string FormatHtml (int r, int g, int b) + { + char [] htmlColor = new char [7]; + htmlColor [0] = '#'; + htmlColor [1] = GetHexNumber ((r >> 4) & 15); + htmlColor [2] = GetHexNumber (r & 15); + htmlColor [3] = GetHexNumber ((g >> 4) & 15); + htmlColor [4] = GetHexNumber (g & 15); + htmlColor [5] = GetHexNumber ((b >> 4) & 15); + htmlColor [6] = GetHexNumber (b & 15); + + return new string (htmlColor); + } + + 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); + } + } +}