Browse Source

Merge pull request #12318 from Gillibald/fixes/getCharacterHitFromDistance

Fix TextLine.GetCharacterHitFromDistance for mixed buffers
pull/12327/head
Max Katz 3 years ago
committed by GitHub
parent
commit
9d57ec0113
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs
  2. 22
      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);

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

@ -713,7 +713,7 @@ namespace Avalonia.Skia.UnitTests.Media.TextFormatting
var characterHit = textLine.GetCharacterHitFromDistance(1000);
Assert.Equal(10, characterHit.FirstCharacterIndex);
Assert.Equal(11, characterHit.FirstCharacterIndex);
Assert.Equal(1, characterHit.TrailingLength);
}
}
@ -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