diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextFormatterImpl.cs b/src/Avalonia.Visuals/Media/TextFormatting/TextFormatterImpl.cs
index 7c6af4eaa7..c97e36d5ff 100644
--- a/src/Avalonia.Visuals/Media/TextFormatting/TextFormatterImpl.cs
+++ b/src/Avalonia.Visuals/Media/TextFormatting/TextFormatterImpl.cs
@@ -193,7 +193,7 @@ namespace Avalonia.Media.TextFormatting
{
var currentRun = textRuns[i];
- if (currentLength + currentRun.GlyphRun.Characters.Length < length)
+ if (currentLength + currentRun.GlyphRun.Characters.Length <= length)
{
currentLength += currentRun.GlyphRun.Characters.Length;
continue;
@@ -283,26 +283,26 @@ namespace Avalonia.Media.TextFormatting
{
var shapedCharacters = previousLineBreak.RemainingCharacters[index];
- if (shapedCharacters == null)
- {
- continue;
- }
-
textRuns.Add(shapedCharacters);
if (TryGetLineBreak(shapedCharacters, out var runLineBreak))
{
var splitResult = SplitTextRuns(textRuns, currentLength + runLineBreak.PositionWrap);
+ if (splitResult.Second == null)
+ {
+ return splitResult.First;
+ }
+
if (++index < previousLineBreak.RemainingCharacters.Count)
{
for (; index < previousLineBreak.RemainingCharacters.Count; index++)
{
- splitResult.Second!.Add(previousLineBreak.RemainingCharacters[index]);
+ splitResult.Second.Add(previousLineBreak.RemainingCharacters[index]);
}
}
- nextLineBreak = new TextLineBreak(splitResult.Second!);
+ nextLineBreak = new TextLineBreak(splitResult.Second);
return splitResult.First;
}
@@ -346,7 +346,10 @@ namespace Avalonia.Media.TextFormatting
{
var splitResult = SplitTextRuns(textRuns, currentLength + runLineBreak.PositionWrap);
- nextLineBreak = new TextLineBreak(splitResult.Second!);
+ if (splitResult.Second != null)
+ {
+ nextLineBreak = new TextLineBreak(splitResult.Second);
+ }
return splitResult.First;
}
@@ -532,7 +535,7 @@ namespace Avalonia.Media.TextFormatting
/// The text range that is covered by the text runs.
private static TextRange GetTextRange(IReadOnlyList textRuns)
{
- if (textRuns is null || textRuns.Count == 0)
+ if (textRuns.Count == 0)
{
return new TextRange();
}
diff --git a/src/Avalonia.Visuals/Media/TextFormatting/TextLayout.cs b/src/Avalonia.Visuals/Media/TextFormatting/TextLayout.cs
index 40e12c8e99..0ed06e4e57 100644
--- a/src/Avalonia.Visuals/Media/TextFormatting/TextLayout.cs
+++ b/src/Avalonia.Visuals/Media/TextFormatting/TextLayout.cs
@@ -401,14 +401,12 @@ namespace Avalonia.Media.TextFormatting
previousLine = textLine;
- if (currentPosition != _text.Length || textLine.TextLineBreak?.RemainingCharacters == null)
+ if (currentPosition == _text.Length && textLine.NewLineLength > 0)
{
- continue;
- }
+ var emptyTextLine = CreateEmptyTextLine(currentPosition);
- var emptyTextLine = CreateEmptyTextLine(currentPosition);
-
- textLines.Add(emptyTextLine);
+ textLines.Add(emptyTextLine);
+ }
}
Size = new Size(width, height);