Browse Source

Special case for hit testing in unit tests.

When not in a unit test, only update the scene from the render loop.
scenegraph-after-breakage
Steven Kirk 10 years ago
parent
commit
db26fe3626
  1. 16
      src/Avalonia.Visuals/Rendering/DeferredRenderer.cs
  2. 1
      tests/Avalonia.Visuals.UnitTests/VisualTree/VisualExtensionsTests_GetVisualsAt.cs

16
src/Avalonia.Visuals/Rendering/DeferredRenderer.cs

@ -33,8 +33,12 @@ namespace Avalonia.Rendering
_root = root; _root = root;
_scene = new Scene(root); _scene = new Scene(root);
_renderLoop = renderLoop;
_renderLoop.Tick += OnRenderLoopTick; if (renderLoop != null)
{
_renderLoop = renderLoop;
_renderLoop.Tick += OnRenderLoopTick;
}
} }
public bool DrawFps { get; set; } public bool DrawFps { get; set; }
@ -53,13 +57,17 @@ namespace Avalonia.Rendering
public void Dispose() public void Dispose()
{ {
_renderLoop.Tick -= OnRenderLoopTick; if (_renderLoop != null)
{
_renderLoop.Tick -= OnRenderLoopTick;
}
} }
public IEnumerable<IVisual> HitTest(Point p, Func<IVisual, bool> filter) public IEnumerable<IVisual> HitTest(Point p, Func<IVisual, bool> filter)
{ {
if (_needsUpdate) if (_renderLoop == null && _needsUpdate)
{ {
// When unit testing the renderLoop may be null, so update the scene manually.
UpdateScene(); UpdateScene();
} }

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

@ -456,7 +456,6 @@ namespace Avalonia.Visuals.UnitTests.VisualTree
return UnitTestApplication.Start( return UnitTestApplication.Start(
new TestServices( new TestServices(
renderInterface: new MockRenderInterface(), renderInterface: new MockRenderInterface(),
renderLoop: Mock.Of<IRenderLoop>(),
renderer: (root, loop) => new DeferredRenderer(root, loop))); renderer: (root, loop) => new DeferredRenderer(root, loop)));
} }
} }

Loading…
Cancel
Save