From 94a5725a038c4b85572604900ee314b7472e836f Mon Sep 17 00:00:00 2001 From: FoggyFinder Date: Tue, 7 Apr 2020 12:21:02 +0300 Subject: [PATCH 1/3] apply transformation to x with alignment in case of empty text --- src/Skia/Avalonia.Skia/FormattedTextImpl.cs | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/Skia/Avalonia.Skia/FormattedTextImpl.cs b/src/Skia/Avalonia.Skia/FormattedTextImpl.cs index 9612fa3d9b..d55af84b14 100644 --- a/src/Skia/Avalonia.Skia/FormattedTextImpl.cs +++ b/src/Skia/Avalonia.Skia/FormattedTextImpl.cs @@ -142,21 +142,16 @@ namespace Avalonia.Skia { var rects = GetRects(); - if (index < 0 || index >= rects.Count) - { - var r = rects.LastOrDefault(); - return new Rect(r.X + r.Width, r.Y, 0, _lineHeight); - } - if (rects.Count == 0) { - return new Rect(0, 0, 1, _lineHeight); + var x = TransformX(0, 0, _paint.TextAlign); + return new Rect(x, 0, 0, _lineHeight); } - if (index == rects.Count) + if (index < 0 || index >= rects.Count) { - var lr = rects[rects.Count - 1]; - return new Rect(new Point(lr.X + lr.Width, lr.Y), rects[index - 1].Size); + var r = rects.LastOrDefault(); + return new Rect(r.X + r.Width, r.Y, 0, _lineHeight); } return rects[index]; From 0aa30536613f78e48f57353d547608bbc7ec5a54 Mon Sep 17 00:00:00 2001 From: FoggyFinder Date: Tue, 7 Apr 2020 18:07:17 +0300 Subject: [PATCH 2/3] update --- src/Skia/Avalonia.Skia/FormattedTextImpl.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Skia/Avalonia.Skia/FormattedTextImpl.cs b/src/Skia/Avalonia.Skia/FormattedTextImpl.cs index d55af84b14..53d55e3f99 100644 --- a/src/Skia/Avalonia.Skia/FormattedTextImpl.cs +++ b/src/Skia/Avalonia.Skia/FormattedTextImpl.cs @@ -140,20 +140,20 @@ namespace Avalonia.Skia public Rect HitTestTextPosition(int index) { - var rects = GetRects(); + var lineWidth = (float)_bounds.Width; + var alignmentOffset = TransformX(0, lineWidth, _paint.TextAlign); - if (rects.Count == 0) + if (string.IsNullOrEmpty(Text) || index < 0) { - var x = TransformX(0, 0, _paint.TextAlign); - return new Rect(x, 0, 0, _lineHeight); + return new Rect(alignmentOffset, 0, 0, _lineHeight); } - if (index < 0 || index >= rects.Count) + if (index >= Text.Length) { - var r = rects.LastOrDefault(); - return new Rect(r.X + r.Width, r.Y, 0, _lineHeight); + return new Rect(lineWidth + alignmentOffset, 0, 0, _lineHeight); } + var rects = GetRects(); return rects[index]; } From f1d54de97f48c5a5d4019f00c5429f18bb153040 Mon Sep 17 00:00:00 2001 From: FoggyFinder Date: Wed, 8 Apr 2020 00:13:42 +0300 Subject: [PATCH 3/3] revert last commit, use Text instead of rects in checks --- src/Skia/Avalonia.Skia/FormattedTextImpl.cs | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/Skia/Avalonia.Skia/FormattedTextImpl.cs b/src/Skia/Avalonia.Skia/FormattedTextImpl.cs index 53d55e3f99..d0157815a9 100644 --- a/src/Skia/Avalonia.Skia/FormattedTextImpl.cs +++ b/src/Skia/Avalonia.Skia/FormattedTextImpl.cs @@ -140,20 +140,17 @@ namespace Avalonia.Skia public Rect HitTestTextPosition(int index) { - var lineWidth = (float)_bounds.Width; - var alignmentOffset = TransformX(0, lineWidth, _paint.TextAlign); - - if (string.IsNullOrEmpty(Text) || index < 0) + if (string.IsNullOrEmpty(Text)) { + var alignmentOffset = TransformX(0, 0, _paint.TextAlign); return new Rect(alignmentOffset, 0, 0, _lineHeight); } - - if (index >= Text.Length) + var rects = GetRects(); + if (index >= Text.Length || index < 0) { - return new Rect(lineWidth + alignmentOffset, 0, 0, _lineHeight); + var r = rects.LastOrDefault(); + return new Rect(r.X + r.Width, r.Y, 0, _lineHeight); } - - var rects = GetRects(); return rects[index]; }