2 * Copyright(c) 2021 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 using System.Reflection;
21 using System.Globalization;
24 using System.ComponentModel;
26 namespace Tizen.NUI.Binding
28 //Internal used, will never open
29 [EditorBrowsable(EditorBrowsableState.Never)]
30 public class Vector2TypeConverter : TypeConverter
32 //Internal used, will never open
33 [EditorBrowsable(EditorBrowsableState.Never)]
34 public override object ConvertFromInvariantString(string value)
38 return FromString(value);
41 throw new InvalidOperationException($"Cannot convert \"{value}\" into {typeof(Vector2)}");
44 //Internal used, will never open
45 [EditorBrowsable(EditorBrowsableState.Never)]
46 public override string ConvertToString(object value)
48 return ToString(value as Vector2);
51 internal static Vector2 FromString(string value)
53 var parts = value.Split(TypeConverter.UnifiedDelimiter);
55 if (parts.Length == 2)
57 return new Vector2(Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture), Single.Parse(parts[1].Trim(), CultureInfo.InvariantCulture));
59 else if (parts.Length == 1)
61 var x = Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture);
62 return new Vector2(x, x);
65 throw new InvalidOperationException($"Cannot convert \"{value}\" into {typeof(Vector2)}");
68 internal static string ToString(Vector2 value)
72 return value.X.ToString() + TypeConverter.UnifiedDelimiter + value.Y.ToString();
81 //Internal used, will never open
82 [EditorBrowsable(EditorBrowsableState.Never)]
83 public class Vector3TypeConverter : TypeConverter
85 //Internal used, will never open
86 [EditorBrowsable(EditorBrowsableState.Never)]
87 public override object ConvertFromInvariantString(string value)
91 string[] parts = value.Split(TypeConverter.UnifiedDelimiter);
92 if (parts.Length == 3)
94 return new Vector3(Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture),
95 Single.Parse(parts[1].Trim(), CultureInfo.InvariantCulture),
96 Single.Parse(parts[2].Trim(), CultureInfo.InvariantCulture));
98 else if (parts.Length == 2)
100 var vector2 = new Vector2(Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture),
101 Single.Parse(parts[1].Trim(), CultureInfo.InvariantCulture));
102 var vector3 = new Vector3(vector2);
106 else if (parts.Length == 1)
108 var floatValue = Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture);
109 return new Vector3(floatValue, floatValue, floatValue);
113 throw new InvalidOperationException($"Cannot convert \"{value}\" into {typeof(Vector3)}");
116 //Internal used, will never open
117 [EditorBrowsable(EditorBrowsableState.Never)]
118 public override string ConvertToString(object value)
120 Vector3 vector = value as Vector3;
123 return vector.X.ToString() + TypeConverter.UnifiedDelimiter + vector.Y.ToString() + TypeConverter.UnifiedDelimiter + vector.Z.ToString();
132 //Internal used, will never open
133 [EditorBrowsable(EditorBrowsableState.Never)]
134 public class Vector4TypeConverter : TypeConverter
136 //Internal used, will never open
137 [EditorBrowsable(EditorBrowsableState.Never)]
138 public override object ConvertFromInvariantString(string value)
142 string[] parts = value.Split(TypeConverter.UnifiedDelimiter);
143 if (parts.Length == 4)
145 return new Vector4(Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture),
146 Single.Parse(parts[1].Trim(), CultureInfo.InvariantCulture),
147 Single.Parse(parts[2].Trim(), CultureInfo.InvariantCulture),
148 Single.Parse(parts[3].Trim(), CultureInfo.InvariantCulture));
150 else if (parts.Length == 3)
152 var vector3 = new Vector3(Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture),
153 Single.Parse(parts[1].Trim(), CultureInfo.InvariantCulture),
154 Single.Parse(parts[2].Trim(), CultureInfo.InvariantCulture));
155 var vector4 = new Vector4(vector3);
159 else if (parts.Length == 2)
161 var vector2 = new Vector2(Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture),
162 Single.Parse(parts[1].Trim(), CultureInfo.InvariantCulture));
163 var vector4 = new Vector4(vector2);
167 else if (parts.Length == 1)
169 Vector4 ret = Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture);
174 throw new InvalidOperationException($"Cannot convert \"{value}\" into {typeof(Vector4)}");
177 //Internal used, will never open
178 [EditorBrowsable(EditorBrowsableState.Never)]
179 public override string ConvertToString(object value)
181 Vector4 vector = value as Vector4;
184 return vector.X.ToString() + TypeConverter.UnifiedDelimiter + vector.Y.ToString() + TypeConverter.UnifiedDelimiter + vector.Z.ToString() + TypeConverter.UnifiedDelimiter + vector.W.ToString();
193 //Internal used, will never open
194 [EditorBrowsable(EditorBrowsableState.Never)]
195 public class RelativeVector2TypeConverter : TypeConverter
197 //Internal used, will never open
198 [EditorBrowsable(EditorBrowsableState.Never)]
199 public override object ConvertFromInvariantString(string value)
203 string[] parts = value.Split(TypeConverter.UnifiedDelimiter);
204 if (parts.Length == 2)
206 return new RelativeVector2(Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture),
207 Single.Parse(parts[1].Trim(), CultureInfo.InvariantCulture));
209 else if (parts.Length == 1)
211 var x = Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture);
212 return new RelativeVector2(x, x);
216 throw new InvalidOperationException($"Cannot convert \"{value}\" into {typeof(RelativeVector2)}");
219 //Internal used, will never open
220 [EditorBrowsable(EditorBrowsableState.Never)]
221 public override string ConvertToString(object value)
223 RelativeVector2 vector = value as RelativeVector2;
226 return vector.X.ToString() + TypeConverter.UnifiedDelimiter + vector.Y.ToString();
235 //Internal used, will never open
236 [EditorBrowsable(EditorBrowsableState.Never)]
237 public class RelativeVector3TypeConverter : TypeConverter
239 //Internal used, will never open
240 [EditorBrowsable(EditorBrowsableState.Never)]
241 public override object ConvertFromInvariantString(string value)
245 string[] parts = value.Split(TypeConverter.UnifiedDelimiter);
246 if (parts.Length == 3)
248 return new RelativeVector3(Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture),
249 Single.Parse(parts[1].Trim(), CultureInfo.InvariantCulture),
250 Single.Parse(parts[2].Trim(), CultureInfo.InvariantCulture));
252 else if (parts.Length == 2)
254 var vector2 = new RelativeVector2(Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture),
255 Single.Parse(parts[1].Trim(), CultureInfo.InvariantCulture));
256 var vector3 = new RelativeVector3(vector2);
260 else if (parts.Length == 1)
262 var x = Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture);
263 return new RelativeVector3(x, x, x);
267 throw new InvalidOperationException($"Cannot convert \"{value}\" into {typeof(RelativeVector3)}");
270 //Internal used, will never open
271 [EditorBrowsable(EditorBrowsableState.Never)]
272 public override string ConvertToString(object value)
274 RelativeVector3 vector = value as RelativeVector3;
277 return vector.X.ToString() + TypeConverter.UnifiedDelimiter + vector.Y.ToString() + TypeConverter.UnifiedDelimiter + vector.Z.ToString();
286 //Internal used, will never open
287 [EditorBrowsable(EditorBrowsableState.Never)]
288 public class RelativeVector4TypeConverter : TypeConverter
290 //Internal used, will never open
291 [EditorBrowsable(EditorBrowsableState.Never)]
292 public override object ConvertFromInvariantString(string value)
296 string[] parts = value.Split(TypeConverter.UnifiedDelimiter);
297 if (parts.Length == 4)
299 return new RelativeVector4(Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture),
300 Single.Parse(parts[1].Trim(), CultureInfo.InvariantCulture),
301 Single.Parse(parts[2].Trim(), CultureInfo.InvariantCulture),
302 Single.Parse(parts[3].Trim(), CultureInfo.InvariantCulture));
304 else if (parts.Length == 3)
306 var vector3 = new RelativeVector3(Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture),
307 Single.Parse(parts[1].Trim(), CultureInfo.InvariantCulture),
308 Single.Parse(parts[2].Trim(), CultureInfo.InvariantCulture));
309 var vector4 = new RelativeVector4(vector3);
313 else if (parts.Length == 2)
315 var vector2 = new RelativeVector2(Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture),
316 Single.Parse(parts[1].Trim(), CultureInfo.InvariantCulture));
317 var vector4 = new RelativeVector4(vector2);
321 else if (parts.Length == 1)
323 var x = Single.Parse(parts[0].Trim(), CultureInfo.InvariantCulture);
324 return new RelativeVector4(x, x, x, x);
328 throw new InvalidOperationException($"Cannot convert \"{value}\" into {typeof(RelativeVector4)}");
331 //Internal used, will never open
332 [EditorBrowsable(EditorBrowsableState.Never)]
333 public override string ConvertToString(object value)
335 RelativeVector4 vector = value as RelativeVector4;
338 return vector.X.ToString() + TypeConverter.UnifiedDelimiter + vector.Y.ToString() + TypeConverter.UnifiedDelimiter + vector.Z.ToString() + TypeConverter.UnifiedDelimiter + vector.W.ToString();