Browse Source

Fixed geometry clip hit testing.

Updated unit test to test for previous problem.
scenegraph-after-breakage
Steven Kirk 10 years ago
parent
commit
a849d7b116
  1. 2
      src/Avalonia.Visuals/Rendering/SceneGraph/Scene.cs
  2. 11
      tests/Avalonia.Visuals.UnitTests/VisualTree/VisualExtensionsTests_GetVisualsAt.cs

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

@ -110,7 +110,7 @@ namespace Avalonia.Rendering.SceneGraph
if (node.GeometryClip != null) if (node.GeometryClip != null)
{ {
var controlPoint = Root.Visual.TranslatePoint(p, node.Visual); var controlPoint = Root.Visual.TranslatePoint(p, node.Visual);
clipped = !node.GeometryClip.FillContains(p); clipped = !node.GeometryClip.FillContains(controlPoint);
} }
if (!clipped) if (!clipped)

11
tests/Avalonia.Visuals.UnitTests/VisualTree/VisualExtensionsTests_GetVisualsAt.cs

@ -458,12 +458,14 @@ namespace Avalonia.Visuals.UnitTests.VisualTree
Canvas canvas; Canvas canvas;
var container = new TestRoot var container = new TestRoot
{ {
Width = 200, Width = 400,
Height = 200, Height = 400,
Child = border = new Border Child = border = new Border
{ {
Background = Brushes.Red, Background = Brushes.Red,
Clip = StreamGeometry.Parse("M100,0 L0,100 100,100"), Clip = StreamGeometry.Parse("M100,0 L0,100 100,100"),
Width = 200,
Height = 200,
Child = canvas = new Canvas Child = canvas = new Canvas
{ {
Background = Brushes.Yellow, Background = Brushes.Yellow,
@ -474,13 +476,14 @@ namespace Avalonia.Visuals.UnitTests.VisualTree
container.Measure(Size.Infinity); container.Measure(Size.Infinity);
container.Arrange(new Rect(container.DesiredSize)); container.Arrange(new Rect(container.DesiredSize));
Assert.Equal(new Rect(100, 100, 200, 200), border.Bounds);
var context = new DrawingContext(Mock.Of<IDrawingContextImpl>()); var context = new DrawingContext(Mock.Of<IDrawingContextImpl>());
var result = container.GetVisualsAt(new Point(100, 100)); var result = container.GetVisualsAt(new Point(200, 200));
Assert.Equal(new IVisual[] { canvas, border }, result); Assert.Equal(new IVisual[] { canvas, border }, result);
result = container.GetVisualsAt(new Point(10, 10)); result = container.GetVisualsAt(new Point(110, 110));
Assert.Empty(result); Assert.Empty(result);
} }
} }

Loading…
Cancel
Save