diff --git a/src/Avalonia.Base/Media/TextFormatting/FormattedTextSource.cs b/src/Avalonia.Base/Media/TextFormatting/FormattedTextSource.cs index a4fc1edd14..1586639fbd 100644 --- a/src/Avalonia.Base/Media/TextFormatting/FormattedTextSource.cs +++ b/src/Avalonia.Base/Media/TextFormatting/FormattedTextSource.cs @@ -58,7 +58,6 @@ namespace Avalonia.Media.TextFormatting var currentProperties = defaultProperties; - var hasOverride = false; var i = 0; @@ -92,15 +91,8 @@ namespace Avalonia.Media.TextFormatting } length = Math.Max(0, textRange.Start + textRange.Length - firstTextSourceIndex); - - if (hasOverride) - { - continue; - } - - hasOverride = true; - currentProperties = propertiesOverride.Value; + break; } if (length < text.Length && i == textModifier.Count) diff --git a/tests/Avalonia.Base.UnitTests/Media/TextFormatting/FormattedTextSourceTests.cs b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/FormattedTextSourceTests.cs new file mode 100644 index 0000000000..d6eb4c98d9 --- /dev/null +++ b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/FormattedTextSourceTests.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using Avalonia.Media; +using Avalonia.Media.TextFormatting; +using Avalonia.Utilities; +using Xunit; + +namespace Avalonia.Base.UnitTests.Media.TextFormatting +{ + + public class FormattedTextSourceTests + { + [Fact] + public void GetTextRun_WithTwoTextStyleOverrides_ShouldGenerateCorrectFirstRun() + { + //Prepare a sample text: The two "He" at the beginning of each line should be displayed with other TextRunProperties + string text = "Hello World\r\nHello"; + Typeface typeface = new Typeface(); + GenericTextRunProperties defaultTextRunProperties = new GenericTextRunProperties(typeface); + IReadOnlyList> textStyleOverrides = new List>() + { + new ValueSpan(0, 2, new GenericTextRunProperties(typeface, backgroundBrush: Brushes.Aqua)), + new ValueSpan(13, 2, new GenericTextRunProperties(typeface, backgroundBrush: Brushes.Aqua)), + }; + + FormattedTextSource textSource = new FormattedTextSource(text, defaultTextRunProperties, textStyleOverrides); + TextRun textRun = textSource.GetTextRun(0); + + Assert.Equal(2, textRun.Length); + Assert.Equal("He", textRun.Text.ToString()); + } + } +}