70ccbe652b5787df9fd429582e0eb214f8d4a47f
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / XamlBinding / ThicknessTypeConverter.cs
1 using System;
2 using System.Globalization;
3
4 namespace Tizen.NUI.Binding
5 {
6         // [Xaml.ProvideCompiled("Xamarin.Forms.Core.XamlC.ThicknessTypeConverter")]
7         [Xaml.TypeConversion(typeof(Thickness))]
8         internal class ThicknessTypeConverter : TypeConverter
9         {
10                 public override object ConvertFromInvariantString(string value)
11                 {
12                         if (value != null) {
13                                 value = value.Trim();
14                                 if (value.Contains(",")) { //Xaml
15                                         var thickness = value.Split(',');
16                                         switch (thickness.Length) {
17                                         case 2:
18                                                 if (   double.TryParse(thickness[0], NumberStyles.Number, CultureInfo.InvariantCulture, out double h)
19                                                         && double.TryParse(thickness[1], NumberStyles.Number, CultureInfo.InvariantCulture, out double v))
20                                                         return new Thickness(h, v);
21                                                 break;
22                                         case 4:
23                                                 if (   double.TryParse(thickness[0], NumberStyles.Number, CultureInfo.InvariantCulture, out double l)
24                                                         && double.TryParse(thickness[1], NumberStyles.Number, CultureInfo.InvariantCulture, out double t)
25                                                         && double.TryParse(thickness[2], NumberStyles.Number, CultureInfo.InvariantCulture, out double r)
26                                                         && double.TryParse(thickness[3], NumberStyles.Number, CultureInfo.InvariantCulture, out double b))
27                                                         return new Thickness(l, t, r, b);
28                                                 break;
29                                         }
30                                 }
31                                 else if (value.Contains(" ")) { //CSS
32                                         var thickness = value.Split(' ');
33                                         switch (thickness.Length) {
34                                         case 2:
35                                                 if (   double.TryParse(thickness[0], NumberStyles.Number, CultureInfo.InvariantCulture, out double v)
36                                                         && double.TryParse(thickness[1], NumberStyles.Number, CultureInfo.InvariantCulture, out double h))
37                                                         return new Thickness(h, v);
38                                                 break;
39                                         case 3:
40                                                 if (   double.TryParse(thickness[0], NumberStyles.Number, CultureInfo.InvariantCulture, out double t)
41                                                         && double.TryParse(thickness[1], NumberStyles.Number, CultureInfo.InvariantCulture, out h)
42                                                         && double.TryParse(thickness[2], NumberStyles.Number, CultureInfo.InvariantCulture, out double b))
43                                                         return new Thickness(h, t, h, b);
44                                                 break;
45                                         case 4:
46                                                 if (   double.TryParse(thickness[0], NumberStyles.Number, CultureInfo.InvariantCulture, out t)
47                                                         && double.TryParse(thickness[1], NumberStyles.Number, CultureInfo.InvariantCulture, out double r)
48                                                         && double.TryParse(thickness[2], NumberStyles.Number, CultureInfo.InvariantCulture, out b)
49                                                         && double.TryParse(thickness[3], NumberStyles.Number, CultureInfo.InvariantCulture, out double l))
50                                                         return new Thickness(l, t, r, b);
51                                                 break;
52                                         }
53                                 }
54                                 else { //single uniform thickness
55                                         if (double.TryParse(value, NumberStyles.Number, CultureInfo.InvariantCulture, out double l))
56                                                 return new Thickness(l);
57                                 }
58                         }
59
60                         throw new InvalidOperationException($"Cannot convert \"{value}\" into {typeof(Thickness)}");
61                 }
62         }
63 }