Browse Source

Fix precession errors

pull/8626/head
Benedikt 4 years ago
parent
commit
4f79ac8a1c
  1. 6
      src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs
  2. 2
      tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextLayoutTests.cs

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

@ -357,7 +357,7 @@ namespace Avalonia.Media.TextFormatting
if (currentPosition + currentRun.TextSourceLength >= characterIndex &&
TryGetDistanceFromCharacterHit(currentRun, characterHit, currentPosition, remainingLength, flowDirection, out var distance, out _))
{
return currentDistance + distance;
return Math.Max(0, currentDistance + distance);
}
//No hit hit found so we add the full width
@ -382,7 +382,7 @@ namespace Avalonia.Media.TextFormatting
distance = currentGlyphRun.Size.Width - distance;
}
return currentDistance - distance;
return Math.Max(0, currentDistance - distance);
}
//No hit hit found so we add the full width
@ -392,7 +392,7 @@ namespace Avalonia.Media.TextFormatting
}
}
return currentDistance;
return Math.Max(0, currentDistance);
}
private static bool TryGetDistanceFromCharacterHit(

2
tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextLayoutTests.cs

@ -1005,7 +1005,7 @@ namespace Avalonia.Skia.UnitTests.Media.TextFormatting
var distance = textLine.GetDistanceFromCharacterHit(new CharacterHit(cluster));
Assert.Equal(currentX, distance);
Assert.Equal(currentX, distance, 5);
currentX += glyphAdvance;

Loading…
Cancel
Save