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;
_scene = new Scene(root);
_renderLoop = renderLoop;
_renderLoop.Tick += OnRenderLoopTick;
if (renderLoop != null)
{
_renderLoop = renderLoop;
_renderLoop.Tick += OnRenderLoopTick;
}
}
public bool DrawFps { get; set; }
@ -53,13 +57,17 @@ namespace Avalonia.Rendering
public void Dispose()
{
_renderLoop.Tick -= OnRenderLoopTick;
if (_renderLoop != null)
{
_renderLoop.Tick -= OnRenderLoopTick;
}
}
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();
}

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

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

Loading…
Cancel
Save