From 4310585d7e1dfcf9b4d28c28b586fa0163cb4499 Mon Sep 17 00:00:00 2001 From: Jumar Macato Date: Tue, 30 Jun 2020 12:15:52 +0800 Subject: [PATCH] simplify parsing --- src/Avalonia.Animation/Easing/Easing.cs | 34 +------------------ src/Avalonia.Animation/Easing/SplineEasing.cs | 5 +++ src/Avalonia.Animation/KeySpline.cs | 5 ++- 3 files changed, 10 insertions(+), 34 deletions(-) diff --git a/src/Avalonia.Animation/Easing/Easing.cs b/src/Avalonia.Animation/Easing/Easing.cs index 8655ee791c..e006459652 100644 --- a/src/Avalonia.Animation/Easing/Easing.cs +++ b/src/Avalonia.Animation/Easing/Easing.cs @@ -28,39 +28,7 @@ namespace Avalonia.Animation.Easings { if (e.Contains(',')) { - var k = e.Split(','); - - if (k.Count() != 4) - { - throw new FormatException($"SplineEasing only accepts exactly 4 arguments."); - } - - var splineEase = new SplineEasing(); - - var setterArray = new Action[4] - { - (x) => splineEase.X1 = x, - - (x) => splineEase.Y1 = x, - - (x) => splineEase.X2 = x, - - (x) => splineEase.Y2 = x - }; - - for (int i = 0; i < 4; i++) - { - if (double.TryParse(k[i], NumberStyles.Any, CultureInfo.InvariantCulture, out var x)) - { - setterArray[i](x); - } - else - { - throw new FormatException($"Parameter string \"{k[i]}\" is not a double."); - } - } - - return splineEase; + return new SplineEasing(KeySpline.Parse(e, CultureInfo.InvariantCulture)); } if (_easingTypes == null) diff --git a/src/Avalonia.Animation/Easing/SplineEasing.cs b/src/Avalonia.Animation/Easing/SplineEasing.cs index 58d30bea51..975fcc4746 100644 --- a/src/Avalonia.Animation/Easing/SplineEasing.cs +++ b/src/Avalonia.Animation/Easing/SplineEasing.cs @@ -68,6 +68,11 @@ namespace Avalonia.Animation.Easings this.Y1 = y2; } + public SplineEasing(KeySpline keySpline) + { + _internalKeySpline = keySpline; + } + public SplineEasing() { _internalKeySpline = new KeySpline(); diff --git a/src/Avalonia.Animation/KeySpline.cs b/src/Avalonia.Animation/KeySpline.cs index 59d7132f7c..a6e9769186 100644 --- a/src/Avalonia.Animation/KeySpline.cs +++ b/src/Avalonia.Animation/KeySpline.cs @@ -81,7 +81,10 @@ namespace Avalonia.Animation /// A with the appropriate values set public static KeySpline Parse(string value, CultureInfo culture) { - using (var tokenizer = new StringTokenizer((string)value, CultureInfo.InvariantCulture, exceptionMessage: "Invalid KeySpline.")) + if (culture is null) + culture = CultureInfo.InvariantCulture; + + using (var tokenizer = new StringTokenizer((string)value, culture, exceptionMessage: $"Invalid KeySpline string: \"{value}\".")) { return new KeySpline(tokenizer.ReadDouble(), tokenizer.ReadDouble(), tokenizer.ReadDouble(), tokenizer.ReadDouble()); }