Browse Source

Make sure TextLine.GetCharacterHitFromDistance for mixed buffers

pull/12318/head
Benedikt Stebner 3 years ago
parent
commit
9c94158ae7
  1. 2
      src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs
  2. 20
      tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextLineTests.cs

2
src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs

@ -216,7 +216,7 @@ namespace Avalonia.Media.TextFormatting
if (_paragraphProperties.FlowDirection == FlowDirection.LeftToRight)
{
currentPosition = lineLength - lastRun.Length;
currentPosition = FirstTextSourceIndex + Length - lastRun.Length;
}
return GetRunCharacterHit(lastRun, currentPosition, distance);

20
tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextLineTests.cs

@ -822,6 +822,26 @@ namespace Avalonia.Skia.UnitTests.Media.TextFormatting
}
}
[Fact]
public void Should_GetCharacterHitFromDistance_From_Mixed_TextBuffer()
{
using (Start())
{
var defaultProperties = new GenericTextRunProperties(Typeface.Default);
var textSource = new MixedTextBufferTextSource();
var formatter = new TextFormatterImpl();
var textLine =
formatter.FormatLine(textSource, 20, double.PositiveInfinity,
new GenericTextParagraphProperties(defaultProperties));
var characterHit = textLine.GetCharacterHitFromDistance(double.PositiveInfinity);
Assert.Equal(40, characterHit.FirstCharacterIndex + characterHit.TrailingLength);
}
}
private class MixedTextBufferTextSource : ITextSource
{
public TextRun? GetTextRun(int textSourceIndex)

Loading…
Cancel
Save