diff --git a/src/Avalonia.Base/Media/BoxShadow.cs b/src/Avalonia.Base/Media/BoxShadow.cs index 91529353ed..a0e1873d30 100644 --- a/src/Avalonia.Base/Media/BoxShadow.cs +++ b/src/Avalonia.Base/Media/BoxShadow.cs @@ -73,40 +73,44 @@ namespace Avalonia.Media public override string ToString() { var sb = StringBuilderCache.Acquire(); + ToString(sb); + return StringBuilderCache.GetStringAndRelease(sb); + } + internal void ToString(StringBuilder sb) + { if (this == default) { - return "none"; + sb.Append("none"); + return; } if (IsInset) { - sb.Append("inset"); + sb.Append("inset "); } if (OffsetX != 0.0) { - sb.AppendFormat(" {0}", OffsetX.ToString(CultureInfo.InvariantCulture)); + sb.AppendFormat("{0} ", OffsetX.ToString(CultureInfo.InvariantCulture)); } if (OffsetY != 0.0) { - sb.AppendFormat(" {0}", OffsetY.ToString(CultureInfo.InvariantCulture)); + sb.AppendFormat("{0} ", OffsetY.ToString(CultureInfo.InvariantCulture)); } - + if (Blur != 0.0) { - sb.AppendFormat(" {0}", Blur.ToString(CultureInfo.InvariantCulture)); + sb.AppendFormat("{0} ", Blur.ToString(CultureInfo.InvariantCulture)); } if (Spread != 0.0) { - sb.AppendFormat(" {0}", Spread.ToString(CultureInfo.InvariantCulture)); + sb.AppendFormat("{0} ", Spread.ToString(CultureInfo.InvariantCulture)); } - sb.AppendFormat(" {0}", Color.ToString()); - - return StringBuilderCache.GetStringAndRelease(sb); + sb.AppendFormat("{0}", Color.ToString()); } public static unsafe BoxShadow Parse(string s) diff --git a/src/Avalonia.Base/Media/BoxShadows.cs b/src/Avalonia.Base/Media/BoxShadows.cs index 385f73f703..3ddd8e0a95 100644 --- a/src/Avalonia.Base/Media/BoxShadows.cs +++ b/src/Avalonia.Base/Media/BoxShadows.cs @@ -39,20 +39,20 @@ namespace Avalonia.Media public override string ToString() { - var sb = StringBuilderCache.Acquire(); - if (Count == 0) { return "none"; } + var sb = StringBuilderCache.Acquire(); foreach (var boxShadow in this) { - sb.AppendFormat("{0} ", boxShadow.ToString()); + boxShadow.ToString(sb); + sb.Append(','); + sb.Append(' '); } - + sb.Remove(sb.Length - 2, 2); return StringBuilderCache.GetStringAndRelease(sb); - } [EditorBrowsable(EditorBrowsableState.Never)] diff --git a/tests/Avalonia.Base.UnitTests/Media/BoxShadowTests.cs b/tests/Avalonia.Base.UnitTests/Media/BoxShadowTests.cs index 5f1860d177..c9092bb133 100644 --- a/tests/Avalonia.Base.UnitTests/Media/BoxShadowTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/BoxShadowTests.cs @@ -41,5 +41,13 @@ namespace Avalonia.Base.UnitTests.Media Assert.Equal(Colors.Red, parsed.Color); } } + + [Fact] + public void BoxShadows_Should_ToString() + { + const string source = "-20 -20 60 #CCFFFFFF, 20 20 60 #33000000"; + var parsed = BoxShadows.Parse(source); + Assert.Equal(source, parsed.ToString(), true); + } } }