Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / CommonUI / System / Drawing / Advanced / ColorTranslator.cs / 1 / ColorTranslator.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Drawing { using System.Runtime.Serialization.Formatters; using System.Runtime.InteropServices; using System.Diagnostics; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Globalization; ////// /// Translates colors to and from GDI+ public sealed class ColorTranslator { private const int Win32RedShift = 0; private const int Win32GreenShift = 8; private const int Win32BlueShift = 16; private static Hashtable htmlSysColorTable; // not creatable... // private ColorTranslator() { } ///objects. /// /// /// Translates the specified public static int ToWin32(Color c) { return c.R << Win32RedShift | c.G << Win32GreenShift | c.B << Win32BlueShift; } ///to a /// Win32 color. /// /// /// Translates the specified public static int ToOle(Color c) { // WARNING!!! WARNING!!! WARNING!!! WARNING!!! // WARNING!!! WARNING!!! WARNING!!! WARNING!!! // We must never have another method called ToOle() with a different signature. // This is so that we can push into the runtime a custom marshaller for OLE_COLOR to Color. if (c.IsKnownColor) { switch (c.ToKnownColor()) { case KnownColor.ActiveBorder: return unchecked((int)0x8000000A); case KnownColor.ActiveCaption: return unchecked((int)0x80000002); case KnownColor.ActiveCaptionText: return unchecked((int)0x80000009); case KnownColor.AppWorkspace: return unchecked((int)0x8000000C); case KnownColor.ButtonFace: return unchecked((int)0x8000000F); case KnownColor.ButtonHighlight: return unchecked((int)0x80000014); case KnownColor.ButtonShadow: return unchecked((int)0x80000010); case KnownColor.Control: return unchecked((int)0x8000000F); case KnownColor.ControlDark: return unchecked((int)0x80000010); case KnownColor.ControlDarkDark: return unchecked((int)0x80000015); case KnownColor.ControlLight: return unchecked((int)0x80000016); case KnownColor.ControlLightLight: return unchecked((int)0x80000014); case KnownColor.ControlText: return unchecked((int)0x80000012); case KnownColor.Desktop: return unchecked((int)0x80000001); case KnownColor.GradientActiveCaption: return unchecked((int)0x8000001B); case KnownColor.GradientInactiveCaption: return unchecked((int)0x8000001C); case KnownColor.GrayText: return unchecked((int)0x80000011); case KnownColor.Highlight: return unchecked((int)0x8000000D); case KnownColor.HighlightText: return unchecked((int)0x8000000E); case KnownColor.HotTrack: return unchecked((int)0x8000000D); case KnownColor.InactiveBorder: return unchecked((int)0x8000000B); case KnownColor.InactiveCaption: return unchecked((int)0x80000003); case KnownColor.InactiveCaptionText: return unchecked((int)0x80000013); case KnownColor.Info: return unchecked((int)0x80000018); case KnownColor.InfoText: return unchecked((int)0x80000017); case KnownColor.Menu: return unchecked((int)0x80000004); case KnownColor.MenuBar: return unchecked((int)0x8000001E); case KnownColor.MenuHighlight: return unchecked((int)0x8000001D); case KnownColor.MenuText: return unchecked((int)0x80000007); case KnownColor.ScrollBar: return unchecked((int)0x80000000); case KnownColor.Window: return unchecked((int)0x80000005); case KnownColor.WindowFrame: return unchecked((int)0x80000006); case KnownColor.WindowText: return unchecked((int)0x80000008); } } return ToWin32(c); } ///to /// an Ole color. /// /// /// Translates an Ole color value to a GDI+ /// public static Color FromOle(int oleColor) { // WARNING!!! WARNING!!! WARNING!!! WARNING!!! // WARNING!!! WARNING!!! WARNING!!! WARNING!!! // We must never have another method called ToOle() with a different signature. // This is so that we can push into the runtime a custom marshaller for OLE_COLOR to Color. // if system color // (the if < 0x18 check test whether it's a well-formed system color) if ((int)(oleColor & 0xFF000000) == unchecked((int)0x80000000) && (oleColor & 0xFFFFFF) <= 0x18) { switch (oleColor) { case unchecked((int)0x8000000A): return Color.FromKnownColor(KnownColor.ActiveBorder); case unchecked((int)0x80000002): return Color.FromKnownColor(KnownColor.ActiveCaption); case unchecked((int)0x80000009): return Color.FromKnownColor(KnownColor.ActiveCaptionText); case unchecked((int)0x8000000C): return Color.FromKnownColor(KnownColor.AppWorkspace); case unchecked((int)0x8000000F): return Color.FromKnownColor(KnownColor.Control); case unchecked((int)0x80000010): return Color.FromKnownColor(KnownColor.ControlDark); case unchecked((int)0x80000015): return Color.FromKnownColor(KnownColor.ControlDarkDark); case unchecked((int)0x80000016): return Color.FromKnownColor(KnownColor.ControlLight); case unchecked((int)0x80000014): return Color.FromKnownColor(KnownColor.ControlLightLight); case unchecked((int)0x80000012): return Color.FromKnownColor(KnownColor.ControlText); case unchecked((int)0x80000001): return Color.FromKnownColor(KnownColor.Desktop); case unchecked((int)0x8000001B): return Color.FromKnownColor(KnownColor.GradientActiveCaption); case unchecked((int)0x8000001C): return Color.FromKnownColor(KnownColor.GradientInactiveCaption); case unchecked((int)0x80000011): return Color.FromKnownColor(KnownColor.GrayText); case unchecked((int)0x8000000D): return Color.FromKnownColor(KnownColor.Highlight); case unchecked((int)0x8000000E): return Color.FromKnownColor(KnownColor.HighlightText); case unchecked((int)0x8000000B): return Color.FromKnownColor(KnownColor.InactiveBorder); case unchecked((int)0x80000003): return Color.FromKnownColor(KnownColor.InactiveCaption); case unchecked((int)0x80000013): return Color.FromKnownColor(KnownColor.InactiveCaptionText); case unchecked((int)0x80000018): return Color.FromKnownColor(KnownColor.Info); case unchecked((int)0x80000017): return Color.FromKnownColor(KnownColor.InfoText); case unchecked((int)0x80000004): return Color.FromKnownColor(KnownColor.Menu); case unchecked((int)0x8000001E): return Color.FromKnownColor(KnownColor.MenuBar); case unchecked((int)0x8000001D): return Color.FromKnownColor(KnownColor.MenuHighlight); case unchecked((int)0x80000007): return Color.FromKnownColor(KnownColor.MenuText); case unchecked((int)0x80000000): return Color.FromKnownColor(KnownColor.ScrollBar); case unchecked((int)0x80000005): return Color.FromKnownColor(KnownColor.Window); case unchecked((int)0x80000006): return Color.FromKnownColor(KnownColor.WindowFrame); case unchecked((int)0x80000008): return Color.FromKnownColor(KnownColor.WindowText); } } Color color = Color.FromArgb((byte)((oleColor >> Win32RedShift) & 0xFF), (byte)((oleColor >> Win32GreenShift) & 0xFF), (byte)((oleColor >> Win32BlueShift) & 0xFF)); return KnownColorTable.ArgbToKnownColor(color.ToArgb()); } ///. /// /// /// Translates an Win32 color value to a /// GDI+ public static Color FromWin32(int win32Color) { return FromOle(win32Color); } ///. /// /// /// Translates an Html color representation to /// a GDI+ public static Color FromHtml(string htmlColor) { Color c = Color.Empty; // empty color if ((htmlColor == null) || (htmlColor.Length == 0)) return c; // #RRGGBB or #RGB if ((htmlColor[0] == '#') && ((htmlColor.Length == 7) || (htmlColor.Length == 4))) { if (htmlColor.Length == 7) { c = Color.FromArgb(Convert.ToInt32(htmlColor.Substring(1, 2), 16), Convert.ToInt32(htmlColor.Substring(3, 2), 16), Convert.ToInt32(htmlColor.Substring(5, 2), 16)); } else { string r = Char.ToString(htmlColor[1]); string g = Char.ToString(htmlColor[2]); string b = Char.ToString(htmlColor[3]); c = Color.FromArgb(Convert.ToInt32(r + r, 16), Convert.ToInt32(g + g, 16), Convert.ToInt32(b + b, 16)); } } // special case. Html requires LightGrey, but .NET uses LightGray if (c.IsEmpty && String.Equals(htmlColor, "LightGrey", StringComparison.OrdinalIgnoreCase)) { c = Color.LightGray; } // System color if (c.IsEmpty) { if (htmlSysColorTable == null) { InitializeHtmlSysColorTable(); } object o = htmlSysColorTable[htmlColor.ToLower(CultureInfo.InvariantCulture)]; if (o != null) { c = (Color)o; } } // resort to type converter which will handle named colors if (c.IsEmpty) { c = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFromString(htmlColor); } return c; } ///. /// /// /// public static string ToHtml(Color c) { string colorString = String.Empty; if (c.IsEmpty) return colorString; if (c.IsSystemColor) { switch (c.ToKnownColor()) { case KnownColor.ActiveBorder: colorString = "activeborder"; break; case KnownColor.GradientActiveCaption: case KnownColor.ActiveCaption: colorString = "activecaption"; break; case KnownColor.AppWorkspace: colorString = "appworkspace"; break; case KnownColor.Desktop: colorString = "background"; break; case KnownColor.Control: colorString = "buttonface"; break; case KnownColor.ControlLight: colorString = "buttonface"; break; case KnownColor.ControlDark: colorString = "buttonshadow"; break; case KnownColor.ControlText: colorString = "buttontext"; break; case KnownColor.ActiveCaptionText: colorString = "captiontext"; break; case KnownColor.GrayText: colorString = "graytext"; break; case KnownColor.HotTrack: case KnownColor.Highlight: colorString = "highlight"; break; case KnownColor.MenuHighlight: case KnownColor.HighlightText: colorString = "highlighttext"; break; case KnownColor.InactiveBorder: colorString = "inactiveborder"; break; case KnownColor.GradientInactiveCaption: case KnownColor.InactiveCaption: colorString = "inactivecaption"; break; case KnownColor.InactiveCaptionText: colorString = "inactivecaptiontext"; break; case KnownColor.Info: colorString = "infobackground"; break; case KnownColor.InfoText: colorString = "infotext"; break; case KnownColor.MenuBar: case KnownColor.Menu: colorString = "menu"; break; case KnownColor.MenuText: colorString = "menutext"; break; case KnownColor.ScrollBar: colorString = "scrollbar"; break; case KnownColor.ControlDarkDark: colorString = "threeddarkshadow"; break; case KnownColor.ControlLightLight: colorString = "buttonhighlight"; break; case KnownColor.Window: colorString = "window"; break; case KnownColor.WindowFrame: colorString = "windowframe"; break; case KnownColor.WindowText: colorString = "windowtext"; break; } } else if (c.IsNamedColor) { if (c == Color.LightGray) { // special case due to mismatch between Html and enum spelling colorString = "LightGrey"; } else { colorString = c.Name; } } else { colorString = "#" + c.R.ToString("X2", null) + c.G.ToString("X2", null) + c.B.ToString("X2", null); } return colorString; } private static void InitializeHtmlSysColorTable() { htmlSysColorTable = new Hashtable(26); htmlSysColorTable["activeborder"] = Color.FromKnownColor(KnownColor.ActiveBorder); htmlSysColorTable["activecaption"] = Color.FromKnownColor(KnownColor.ActiveCaption); htmlSysColorTable["appworkspace"] = Color.FromKnownColor(KnownColor.AppWorkspace); htmlSysColorTable["background"] = Color.FromKnownColor(KnownColor.Desktop); htmlSysColorTable["buttonface"] = Color.FromKnownColor(KnownColor.Control); htmlSysColorTable["buttonhighlight"] = Color.FromKnownColor(KnownColor.ControlLightLight); htmlSysColorTable["buttonshadow"] = Color.FromKnownColor(KnownColor.ControlDark); htmlSysColorTable["buttontext"] = Color.FromKnownColor(KnownColor.ControlText); htmlSysColorTable["captiontext"] = Color.FromKnownColor(KnownColor.ActiveCaptionText); htmlSysColorTable["graytext"] = Color.FromKnownColor(KnownColor.GrayText); htmlSysColorTable["highlight"] = Color.FromKnownColor(KnownColor.Highlight); htmlSysColorTable["highlighttext"] = Color.FromKnownColor(KnownColor.HighlightText); htmlSysColorTable["inactiveborder"] = Color.FromKnownColor(KnownColor.InactiveBorder); htmlSysColorTable["inactivecaption"] = Color.FromKnownColor(KnownColor.InactiveCaption); htmlSysColorTable["inactivecaptiontext"] = Color.FromKnownColor(KnownColor.InactiveCaptionText); htmlSysColorTable["infobackground"] = Color.FromKnownColor(KnownColor.Info); htmlSysColorTable["infotext"] = Color.FromKnownColor(KnownColor.InfoText); htmlSysColorTable["menu"] = Color.FromKnownColor(KnownColor.Menu); htmlSysColorTable["menutext"] = Color.FromKnownColor(KnownColor.MenuText); htmlSysColorTable["scrollbar"] = Color.FromKnownColor(KnownColor.ScrollBar); htmlSysColorTable["threeddarkshadow"] = Color.FromKnownColor(KnownColor.ControlDarkDark); htmlSysColorTable["threedface"] = Color.FromKnownColor(KnownColor.Control); htmlSysColorTable["threedhighlight"] = Color.FromKnownColor(KnownColor.ControlLight); htmlSysColorTable["threedlightshadow"] = Color.FromKnownColor(KnownColor.ControlLightLight); htmlSysColorTable["window"] = Color.FromKnownColor(KnownColor.Window); htmlSysColorTable["windowframe"] = Color.FromKnownColor(KnownColor.WindowFrame); htmlSysColorTable["windowtext"] = Color.FromKnownColor(KnownColor.WindowText); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved./// Translates the specified ///to an Html string color representation. ///
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ServiceContractGenerator.cs
- ResXFileRef.cs
- Rijndael.cs
- ConstraintStruct.cs
- Deflater.cs
- DrawingBrush.cs
- PropertyRef.cs
- ExpandSegment.cs
- MulticastNotSupportedException.cs
- OleDragDropHandler.cs
- RemoteWebConfigurationHostServer.cs
- RepeatBehavior.cs
- CleanUpVirtualizedItemEventArgs.cs
- LocationInfo.cs
- AuthorizationPolicyTypeElement.cs
- XmlNodeReader.cs
- StringBuilder.cs
- Function.cs
- IdleTimeoutMonitor.cs
- TransformProviderWrapper.cs
- OperatingSystem.cs
- InvalidFilterCriteriaException.cs
- DBCommand.cs
- ToolStripContextMenu.cs
- ElementHost.cs
- GridViewColumnCollection.cs
- EntityDataSourceContextDisposingEventArgs.cs
- COM2IProvidePropertyBuilderHandler.cs
- PaperSize.cs
- XmlComment.cs
- DurationConverter.cs
- CompiledXpathExpr.cs
- AnchoredBlock.cs
- SimpleRecyclingCache.cs
- EnumDataContract.cs
- Image.cs
- AssemblyGen.cs
- XsltContext.cs
- TemplateContentLoader.cs
- Guid.cs
- StringFunctions.cs
- InnerItemCollectionView.cs
- HMACSHA256.cs
- XmlDocumentSchema.cs
- ContentFilePart.cs
- ObjectCloneHelper.cs
- DataListItem.cs
- MultiDataTrigger.cs
- Types.cs
- InstalledFontCollection.cs
- EdmRelationshipNavigationPropertyAttribute.cs
- X509CertificateEndpointIdentity.cs
- ValueTypeFieldReference.cs
- GlyphInfoList.cs
- GridViewItemAutomationPeer.cs
- NullableIntMinMaxAggregationOperator.cs
- TextInfo.cs
- SqlNode.cs
- relpropertyhelper.cs
- Schema.cs
- RepeaterItemCollection.cs
- ExpressionUtilities.cs
- RSAPKCS1SignatureFormatter.cs
- DBBindings.cs
- PeerNameRecord.cs
- StandardBindingElement.cs
- SetStoryboardSpeedRatio.cs
- XmlUtil.cs
- TriggerCollection.cs
- RuleInfoComparer.cs
- Win32Native.cs
- DataBoundControlDesigner.cs
- SingleAnimationUsingKeyFrames.cs
- DataGridViewCellParsingEventArgs.cs
- HttpChannelBindingToken.cs
- AudioSignalProblemOccurredEventArgs.cs
- SqlTypeSystemProvider.cs
- TraceSection.cs
- Converter.cs
- IItemProperties.cs
- CallId.cs
- UserControlDocumentDesigner.cs
- MailWebEventProvider.cs
- AstNode.cs
- OneOfTypeConst.cs
- GridViewRowEventArgs.cs
- XmlCharCheckingWriter.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- HwndKeyboardInputProvider.cs
- DetailsViewRowCollection.cs
- SettingsAttributeDictionary.cs
- AccessDataSourceView.cs
- PropertyMetadata.cs
- EditorPartChrome.cs
- XmlUtil.cs
- RenderingBiasValidation.cs
- Soap.cs
- TemplateField.cs
- RawMouseInputReport.cs
- InternalSafeNativeMethods.cs