From 620be6f1050c014576f8079e6abbd29acc90772b Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 5 Nov 2019 09:32:22 +0000 Subject: [PATCH 1/4] add failing unit test for empty textbox hit test. --- tests/Avalonia.RenderTests/Media/FormattedTextImplTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Avalonia.RenderTests/Media/FormattedTextImplTests.cs b/tests/Avalonia.RenderTests/Media/FormattedTextImplTests.cs index 353123ab2a..8eedb1dde7 100644 --- a/tests/Avalonia.RenderTests/Media/FormattedTextImplTests.cs +++ b/tests/Avalonia.RenderTests/Media/FormattedTextImplTests.cs @@ -157,6 +157,7 @@ namespace Avalonia.Direct2D1.RenderTests.Media [InlineData(stringmiddle3lines, 500, 13, false, false, 8)] [InlineData(stringmiddle3lines, 30, 25, false, false, 9)] [InlineData(stringmiddle3lines, -1, 30, false, false, 10)] + [InlineData("", 0, 0, false, false, 0)] public void Should_HitTestPoint_Correctly(string input, double x, double y, bool isInside, bool isTrailing, int pos) From 69c24dc99df33a7eb8ee544ccba0a465acd9a632 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 5 Nov 2019 09:33:09 +0000 Subject: [PATCH 2/4] fix bug in skia empty formatted text hit test. --- src/Skia/Avalonia.Skia/FormattedTextImpl.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Skia/Avalonia.Skia/FormattedTextImpl.cs b/src/Skia/Avalonia.Skia/FormattedTextImpl.cs index a5e56b1d7a..07e3700fc2 100644 --- a/src/Skia/Avalonia.Skia/FormattedTextImpl.cs +++ b/src/Skia/Avalonia.Skia/FormattedTextImpl.cs @@ -118,7 +118,7 @@ namespace Avalonia.Skia } } - if (!line.Equals(default)) + if (!line.Equals(default(AvaloniaFormattedTextLine))) { var rects = GetRects(); From 86d21f27a7fec5cb595fa6a7b1432611f9f26ee8 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 5 Nov 2019 10:01:25 +0000 Subject: [PATCH 3/4] fix empty text hit test. direct2d --- src/Windows/Avalonia.Direct2D1/Media/FormattedTextImpl.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Windows/Avalonia.Direct2D1/Media/FormattedTextImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/FormattedTextImpl.cs index b73deb1f0a..ede66fb265 100644 --- a/src/Windows/Avalonia.Direct2D1/Media/FormattedTextImpl.cs +++ b/src/Windows/Avalonia.Direct2D1/Media/FormattedTextImpl.cs @@ -72,7 +72,7 @@ namespace Avalonia.Direct2D1.Media return new TextHitTestResult { - IsInside = isInside, + IsInside = result.Width == 0 ? false : (bool)isInside, TextPosition = result.TextPosition, IsTrailing = isTrailingHit, }; From 5b3e2320a8eff35156467ce8b4025ca2df7827bb Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 5 Nov 2019 10:15:36 +0000 Subject: [PATCH 4/4] remove unit tests, skia and direct2d behave differently and making them match is beyond the scope of this bug fix. --- src/Windows/Avalonia.Direct2D1/Media/FormattedTextImpl.cs | 2 +- tests/Avalonia.RenderTests/Media/FormattedTextImplTests.cs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Windows/Avalonia.Direct2D1/Media/FormattedTextImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/FormattedTextImpl.cs index ede66fb265..b73deb1f0a 100644 --- a/src/Windows/Avalonia.Direct2D1/Media/FormattedTextImpl.cs +++ b/src/Windows/Avalonia.Direct2D1/Media/FormattedTextImpl.cs @@ -72,7 +72,7 @@ namespace Avalonia.Direct2D1.Media return new TextHitTestResult { - IsInside = result.Width == 0 ? false : (bool)isInside, + IsInside = isInside, TextPosition = result.TextPosition, IsTrailing = isTrailingHit, }; diff --git a/tests/Avalonia.RenderTests/Media/FormattedTextImplTests.cs b/tests/Avalonia.RenderTests/Media/FormattedTextImplTests.cs index 8eedb1dde7..353123ab2a 100644 --- a/tests/Avalonia.RenderTests/Media/FormattedTextImplTests.cs +++ b/tests/Avalonia.RenderTests/Media/FormattedTextImplTests.cs @@ -157,7 +157,6 @@ namespace Avalonia.Direct2D1.RenderTests.Media [InlineData(stringmiddle3lines, 500, 13, false, false, 8)] [InlineData(stringmiddle3lines, 30, 25, false, false, 9)] [InlineData(stringmiddle3lines, -1, 30, false, false, 10)] - [InlineData("", 0, 0, false, false, 0)] public void Should_HitTestPoint_Correctly(string input, double x, double y, bool isInside, bool isTrailing, int pos)