Browse Source

TextLayout: TextStyleOverrides aren't applied correctly (#17922)

* Added FormattedTextSource->GetTextRun failing test

* Ensure that TextLayout-TextRuns are correctly generated from the passed TextStyleOverrides using the FormattedTextSource->GetTextRun method.

---------

Co-authored-by: Benedikt Stebner <Gillibald@users.noreply.github.com>
pull/18092/head
solveEM 1 year ago
committed by GitHub
parent
commit
5f0ae7fccb
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 10
      src/Avalonia.Base/Media/TextFormatting/FormattedTextSource.cs
  2. 32
      tests/Avalonia.Base.UnitTests/Media/TextFormatting/FormattedTextSourceTests.cs

10
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)

32
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<ValueSpan<TextRunProperties>> textStyleOverrides = new List<ValueSpan<TextRunProperties>>()
{
new ValueSpan<TextRunProperties>(0, 2, new GenericTextRunProperties(typeface, backgroundBrush: Brushes.Aqua)),
new ValueSpan<TextRunProperties>(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());
}
}
}
Loading…
Cancel
Save