static private Color ParseContextColor(string trimmedColor, IFormatProvider formatProvider, ITypeDescriptorContext context) { if (!trimmedColor.StartsWith(s_ContextColor, StringComparison.OrdinalIgnoreCase)) { throw new FormatException(SR.Get(SRID.Parsers_IllegalToken)); } string tokens = trimmedColor.Substring(s_ContextColor.Length); tokens = tokens.Trim(); string[] preSplit = tokens.Split(new Char[] { ' ' }); if (preSplit.GetLength(0) < 2) { throw new FormatException(SR.Get(SRID.Parsers_IllegalToken)); } tokens = tokens.Substring(preSplit[0].Length); TokenizerHelper th = new TokenizerHelper(tokens, formatProvider); string[] split = tokens.Split(new Char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries); int numTokens = split.GetLength(0); float alpha = Convert.ToSingle(th.NextTokenRequired(), formatProvider); float[] values = new float[numTokens - 1]; for (int i = 0; i < numTokens - 1; i++) { values[i] = Convert.ToSingle(th.NextTokenRequired(), formatProvider); } string profileString = preSplit[0]; UriHolder uriHolder = TypeConverterHelper.GetUriFromUriContext(context, profileString); Uri profileUri; if (uriHolder.BaseUri != null) { profileUri = new Uri(uriHolder.BaseUri, uriHolder.OriginalUri); } else { profileUri = uriHolder.OriginalUri; } Color result = Color.FromAValues(alpha, values, profileUri); // If the number of color values found does not match the number of channels in the profile, we must throw if (result.ColorContext.NumChannels != values.Length) { throw new FormatException(SR.Get(SRID.Parsers_IllegalToken)); } return(result); }
/// <summary> /// TypeConverter method implementation. /// </summary> /// <param name="context">ITypeDescriptorContext</param> /// <param name="culture">current culture (see CLR specs)</param> /// <param name="value">value to convert from</param> /// <returns>value that is result of conversion</returns> public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (value is string) { string text = ((string)value).Trim(); if (text != String.Empty) { if (text.LastIndexOf('.') == -1) { CursorType ct = (CursorType)Enum.Parse(typeof(CursorType), text); switch (ct) { case CursorType.Arrow: return(Cursors.Arrow); case CursorType.AppStarting: return(Cursors.AppStarting); case CursorType.Cross: return(Cursors.Cross); case CursorType.Help: return(Cursors.Help); case CursorType.IBeam: return(Cursors.IBeam); case CursorType.SizeAll: return(Cursors.SizeAll); case CursorType.SizeNESW: return(Cursors.SizeNESW); case CursorType.SizeNS: return(Cursors.SizeNS); case CursorType.SizeNWSE: return(Cursors.SizeNWSE); case CursorType.SizeWE: return(Cursors.SizeWE); case CursorType.UpArrow: return(Cursors.UpArrow); case CursorType.Wait: return(Cursors.Wait); case CursorType.Hand: return(Cursors.Hand); case CursorType.No: return(Cursors.No); case CursorType.None: return(Cursors.None); case CursorType.Pen: return(Cursors.Pen); case CursorType.ScrollNS: return(Cursors.ScrollNS); case CursorType.ScrollWE: return(Cursors.ScrollWE); case CursorType.ScrollAll: return(Cursors.ScrollAll); case CursorType.ScrollN: return(Cursors.ScrollN); case CursorType.ScrollS: return(Cursors.ScrollS); case CursorType.ScrollW: return(Cursors.ScrollW); case CursorType.ScrollE: return(Cursors.ScrollE); case CursorType.ScrollNW: return(Cursors.ScrollNW); case CursorType.ScrollNE: return(Cursors.ScrollNE); case CursorType.ScrollSW: return(Cursors.ScrollSW); case CursorType.ScrollSE: return(Cursors.ScrollSE); case CursorType.ArrowCD: return(Cursors.ArrowCD); } } else { if (text.EndsWith(".cur", StringComparison.OrdinalIgnoreCase) || text.EndsWith(".ani", StringComparison.OrdinalIgnoreCase)) { UriHolder uriHolder = TypeConverterHelper.GetUriFromUriContext(context, text); Uri finalUri = BindUriHelper.GetResolvedUri(uriHolder.BaseUri, uriHolder.OriginalUri); if (finalUri.IsAbsoluteUri && finalUri.IsFile) { return(new Cursor(finalUri.LocalPath)); } else { System.Net.WebRequest request = WpfWebRequestHelper.CreateRequest(finalUri); WpfWebRequestHelper.ConfigCachePolicy(request, false); return(new Cursor(WpfWebRequestHelper.GetResponseStream(request))); } } } } else { // An empty string means no cursor. return(null); } } throw GetConvertFromException(value); }