From 251dcbf2cde985f6a62433c6b12448cb9a351d55 Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Thu, 6 May 2021 05:50:20 +0200 Subject: [PATCH 1/3] Add failing unit test --- .../Media/TextFormatting/TextFormatterTests.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs b/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs index 05dd32b84d..a1c2dfdec8 100644 --- a/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs +++ b/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs @@ -401,6 +401,24 @@ namespace Avalonia.Skia.UnitTests.Media.TextFormatting Assert.Equal(expectedOffset, textLine.Start); } } + + [Fact] + public void Should_FormatLine_With_Emergency_Breaks() + { + using (Start()) + { + var defaultProperties = new GenericTextRunProperties(Typeface.Default); + var paragraphProperties = new GenericTextParagraphProperties(defaultProperties); + + var textSource = new SingleBufferTextSource("0123456789_0123456789_0123456789_0123456789", defaultProperties); + var formatter = new TextFormatterImpl(); + + var textLine = + formatter.FormatLine(textSource, 0, 33, paragraphProperties); + + Assert.NotNull(textLine.TextLineBreak.RemainingCharacters); + } + } public static IDisposable Start() { From 96df38c88e53369140178af768b63b58b5092a1b Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Thu, 6 May 2021 05:55:23 +0200 Subject: [PATCH 2/3] Add failing unit test --- .../Media/TextFormatting/TextFormatterTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs b/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs index a1c2dfdec8..97af874238 100644 --- a/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs +++ b/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs @@ -408,7 +408,7 @@ namespace Avalonia.Skia.UnitTests.Media.TextFormatting using (Start()) { var defaultProperties = new GenericTextRunProperties(Typeface.Default); - var paragraphProperties = new GenericTextParagraphProperties(defaultProperties); + var paragraphProperties = new GenericTextParagraphProperties(defaultProperties, textWrap: TextWrapping.Wrap); var textSource = new SingleBufferTextSource("0123456789_0123456789_0123456789_0123456789", defaultProperties); var formatter = new TextFormatterImpl(); @@ -416,7 +416,7 @@ namespace Avalonia.Skia.UnitTests.Media.TextFormatting var textLine = formatter.FormatLine(textSource, 0, 33, paragraphProperties); - Assert.NotNull(textLine.TextLineBreak.RemainingCharacters); + Assert.NotNull(textLine.TextLineBreak?.RemainingCharacters); } } From 11e025fc68b92300b622bf15d1d5340d8a6313af Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Thu, 6 May 2021 05:56:08 +0200 Subject: [PATCH 3/3] Fix emergency breaks --- src/Avalonia.Visuals/Media/TextFormatting/TextFormatterImpl.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextFormatterImpl.cs b/src/Avalonia.Visuals/Media/TextFormatting/TextFormatterImpl.cs index 300d61f81d..6533c34ba0 100644 --- a/src/Avalonia.Visuals/Media/TextFormatting/TextFormatterImpl.cs +++ b/src/Avalonia.Visuals/Media/TextFormatting/TextFormatterImpl.cs @@ -422,7 +422,7 @@ namespace Avalonia.Media.TextFormatting } else { - currentPosition = currentLength + lineBreaker.Current.PositionWrap; + currentPosition = currentLength + measuredLength; } breakFound = true;