|
|
@@ -99,9 +99,26 @@ namespace Avalonia.Skia
|
|
|
public TextHitTestResult HitTestPoint(Point point)
|
|
|
{
|
|
|
float y = (float)point.Y;
|
|
|
- var line = _skiaLines.Find(l => l.Top <= y && (l.Top + l.Height) > y);
|
|
|
|
|
|
- if (!line.Equals(default(AvaloniaFormattedTextLine)))
|
|
|
+ AvaloniaFormattedTextLine line = default;
|
|
|
+
|
|
|
+ float nextTop = 0;
|
|
|
+
|
|
|
+ foreach(var currentLine in _skiaLines)
|
|
|
+ {
|
|
|
+ if(currentLine.Top <= y)
|
|
|
+ {
|
|
|
+ line = currentLine;
|
|
|
+ nextTop = currentLine.Top + currentLine.Height;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ nextTop = currentLine.Top;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!line.Equals(default))
|
|
|
{
|
|
|
var rects = GetRects();
|
|
|
|
|
|
@@ -127,12 +144,15 @@ namespace Avalonia.Skia
|
|
|
line.Length : (line.Length - 1);
|
|
|
}
|
|
|
|
|
|
- return new TextHitTestResult
|
|
|
+ if (y < nextTop)
|
|
|
{
|
|
|
- IsInside = false,
|
|
|
- TextPosition = line.Start + offset,
|
|
|
- IsTrailing = Text.Length == (line.Start + offset + 1)
|
|
|
- };
|
|
|
+ return new TextHitTestResult
|
|
|
+ {
|
|
|
+ IsInside = false,
|
|
|
+ TextPosition = line.Start + offset,
|
|
|
+ IsTrailing = Text.Length == (line.Start + offset + 1)
|
|
|
+ };
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
bool end = point.X > _bounds.Width || point.Y > _lines.Sum(l => l.Height);
|