summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Core/FontSizeConverter.cs
blob: 0d0a8865103d68051cf52139f8c42e76eb78b27a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using System;
using System.Globalization;
using Xamarin.Forms.Xaml;

namespace Xamarin.Forms
{
	public class FontSizeConverter : TypeConverter, IExtendedTypeConverter
	{
		[Obsolete("use ConvertFromInvariantString (string, IServiceProvider)")]
		object IExtendedTypeConverter.ConvertFrom(CultureInfo culture, object value, IServiceProvider serviceProvider)
		{
			return ((IExtendedTypeConverter)this).ConvertFromInvariantString(value as string, serviceProvider);
		}

		object IExtendedTypeConverter.ConvertFromInvariantString(string value, IServiceProvider serviceProvider)
		{
			if (value != null)
			{
				double size;
				if (double.TryParse(value, NumberStyles.Number, CultureInfo.InvariantCulture, out size))
					return size;
				NamedSize namedSize;
				if (Enum.TryParse(value, out namedSize))
				{
					Type type;
					var valueTargetProvider = serviceProvider.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget;
					type = valueTargetProvider != null ? valueTargetProvider.TargetObject.GetType() : typeof(Label);
					return Device.GetNamedSize(namedSize, type, false);
				}
			}
			throw new InvalidOperationException(string.Format("Cannot convert \"{0}\" into {1}", value, typeof(double)));
		}

		public override object ConvertFromInvariantString(string value)
		{
			if (value != null)
			{
				double size;
				if (double.TryParse(value, NumberStyles.Number, CultureInfo.InvariantCulture, out size))
					return size;
				NamedSize namedSize;
				if (Enum.TryParse(value, out namedSize))
					return Device.GetNamedSize(namedSize, typeof(Label), false);
			}
			throw new InvalidOperationException(string.Format("Cannot convert \"{0}\" into {1}", value, typeof(double)));
		}
	}
}