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; diff --git a/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs b/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs index 05dd32b84d..97af874238 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, textWrap: TextWrapping.Wrap); + + 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() {