From 3e127d70a1450c3c0960c84e6385a7333222dfdd Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Tue, 20 Sep 2022 12:46:00 +0200 Subject: [PATCH] Fix RTL hit testing after bidi mirror changes --- src/Avalonia.Base/Media/GlyphRun.cs | 7 +++++-- .../Media/TextFormatting/TextLayoutTests.cs | 5 ++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Base/Media/GlyphRun.cs b/src/Avalonia.Base/Media/GlyphRun.cs index cae7a8fe75..58edea95ea 100644 --- a/src/Avalonia.Base/Media/GlyphRun.cs +++ b/src/Avalonia.Base/Media/GlyphRun.cs @@ -361,7 +361,9 @@ namespace Avalonia.Media characterIndex = cluster; - if (currentX - advance < distance) + var offsetX = currentX - advance; + + if (offsetX < distance) { break; } @@ -375,7 +377,8 @@ namespace Avalonia.Media var characterHit = FindNearestCharacterHit(characterIndex, out var width); var delta = width / 2; - var offset = IsLeftToRight ? distance - currentX : currentX - distance; + + var offset = IsLeftToRight ? Math.Round(distance - currentX, 3) : Math.Round(currentX - distance, 3); var isTrailing = offset > delta; diff --git a/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextLayoutTests.cs b/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextLayoutTests.cs index 43948e9229..e21986d3a2 100644 --- a/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextLayoutTests.cs +++ b/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextLayoutTests.cs @@ -1009,7 +1009,10 @@ namespace Avalonia.Skia.UnitTests.Media.TextFormatting currentX += glyphAdvance; - cluster = clusters[j]; + if(glyphAdvance > 0) + { + cluster = clusters[j]; + } } } }