Browse Source

HitTestEnumerator: FilterAndClip don't transform point for ICustomHitTest

pull/5923/head
mat1jaczyyy 5 years ago
parent
commit
ad14ece468
  1. 2
      src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs
  2. 6
      src/Avalonia.Visuals/Rendering/SceneGraph/Scene.cs

2
src/Avalonia.Visuals/Rendering/ImmediateRenderer.cs

@ -225,7 +225,7 @@ namespace Avalonia.Rendering
if (filter?.Invoke(visual) != false) if (filter?.Invoke(visual) != false)
{ {
bool containsPoint = false; bool containsPoint;
if (visual is ICustomSimpleHitTest custom) if (visual is ICustomSimpleHitTest custom)
{ {

6
src/Avalonia.Visuals/Rendering/SceneGraph/Scene.cs

@ -256,7 +256,8 @@ namespace Avalonia.Rendering.SceneGraph
if (childCount == 0 || wasVisited) if (childCount == 0 || wasVisited)
{ {
if ((wasVisited || FilterAndClip(node, ref clip)) && (node.Visual is ICustomSimpleHitTest custom ? custom.HitTest(_point) : node.HitTest(_point))) if ((wasVisited || FilterAndClip(node, ref clip)) &&
(node.Visual is ICustomSimpleHitTest custom ? custom.HitTest(_point) : node.HitTest(_point)))
{ {
_current = node.Visual; _current = node.Visual;
@ -311,8 +312,7 @@ namespace Avalonia.Rendering.SceneGraph
if (!clipped && node.Visual is ICustomHitTest custom) if (!clipped && node.Visual is ICustomHitTest custom)
{ {
var controlPoint = _sceneRoot.Visual.TranslatePoint(_point, node.Visual); clipped = !custom.HitTest(_point);
clipped = !custom.HitTest(controlPoint.Value);
} }
return !clipped; return !clipped;

Loading…
Cancel
Save