-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSizeFConverter.cs
More file actions
132 lines (123 loc) · 4.54 KB
/
SizeFConverter.cs
File metadata and controls
132 lines (123 loc) · 4.54 KB
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
namespace Eto.Drawing;
/// <summary>
/// Converter for the <see cref="SizeF"/> class
/// </summary>
/// <remarks>
/// Allows for conversion from a string to a <see cref="SizeF"/>.
/// </remarks>
/// <copyright>(c) 2014 by Curtis Wensley</copyright>
/// <license type="BSD-3">See LICENSE for full terms</license>
class SizeFConverterInternal : sc.TypeConverter
{
/// <summary>
/// The character to split up the string which will be converted
/// </summary>
static readonly char[] DimensionSplitter = new char[1] { ',' };
/// <summary>
/// Determines if this converter can convert from the specified <paramref name="sourceType"/>
/// </summary>
/// <param name="context">Conversion context</param>
/// <param name="sourceType">Type to convert from</param>
/// <returns>True if this converter can convert from the specified type, false otherwise</returns>
public override bool CanConvertFrom(sc.ITypeDescriptorContext context, Type sourceType)
{
return sourceType == typeof(string);
}
/// <summary>
/// Converts the specified value to a <see cref="SizeF"/>
/// </summary>
/// <param name="context">Conversion context</param>
/// <param name="culture">Culture to perform the conversion</param>
/// <param name="value">Value to convert</param>
/// <returns>A new instance of a <see cref="SizeF"/> converted from the specified <paramref name="value"/></returns>
public override object ConvertFrom(sc.ITypeDescriptorContext context, CultureInfo culture, object value)
{
string text = value as string;
if (text != null)
{
string[] parts = text.Split(DimensionSplitter, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length == 1)
{
try
{
return new SizeF(
int.Parse(parts[0])
);
}
catch
{
throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "Cannot parse value '{0}' as SizeF. Should be a single integer", text));
}
}
if (parts.Length != 2)
throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "Cannot parse value '{0}' as SizeF. Should be in the form of 'width, height'", text));
try
{
return new SizeF(
float.Parse(parts[0]),
float.Parse(parts[1])
);
}
catch
{
throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "Cannot parse value '{0}' as SizeF. Should be in the form of 'width, height'", text));
}
}
return base.ConvertFrom(context, culture, value);
}
}
/// <summary>
/// Converter for the <see cref="SizeF"/> class
/// </summary>
/// <remarks>
/// Allows for conversion from a string to a <see cref="SizeF"/>.
/// </remarks>
/// <copyright>(c) 2014 by Curtis Wensley</copyright>
/// <license type="BSD-3">See LICENSE for full terms</license>
[Obsolete("Since 2.5. Use TypeDescriptor.GetConverter instead")]
public class SizeFConverter : TypeConverter
{
/// <summary>
/// The character to split up the string which will be converted
/// </summary>
static readonly char[] DimensionSplitter = new char[1] { ',' };
/// <summary>
/// Determines if this converter can convert from the specified <paramref name="sourceType"/>
/// </summary>
/// <param name="context">Conversion context</param>
/// <param name="sourceType">Type to convert from</param>
/// <returns>True if this converter can convert from the specified type, false otherwise</returns>
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
return sourceType == typeof(string);
}
/// <summary>
/// Converts the specified value to a <see cref="SizeF"/>
/// </summary>
/// <param name="context">Conversion context</param>
/// <param name="culture">Culture to perform the conversion</param>
/// <param name="value">Value to convert</param>
/// <returns>A new instance of a <see cref="SizeF"/> converted from the specified <paramref name="value"/></returns>
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
string text = value as string;
if (text != null)
{
string[] parts = text.Split(DimensionSplitter, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length != 2)
throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "Cannot parse value '{0}' as SizeF. Should be in the form of 'width, height'", text));
try
{
return new SizeF(
float.Parse(parts[0]),
float.Parse(parts[1])
);
}
catch
{
throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "Cannot parse value '{0}' as SizeF. Should be in the form of 'width, height'", text));
}
}
return base.ConvertFrom(context, culture, value);
}
}