Browse Source

Set dirty rect when control removed/hidden.

And added unit tests. This bug resulted in a glitch on the Carousel page
in ControlCatalog when the images were scrolled.
scenegraph-after-breakage
Steven Kirk 10 years ago
parent
commit
059b937237
  1. 7
      src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs
  2. 2
      tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs

7
src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs

@ -256,16 +256,13 @@ namespace Avalonia.Rendering.SceneGraph
scene.Remove(node);
node.SubTreeUpdated = true;
scene.Layers[node.LayerRoot].Dirty.Add(node.Bounds);
foreach (VisualNode child in node.Children)
{
var geometry = child as IDrawOperation;
var visual = child as VisualNode;
if (geometry != null)
{
scene.Layers[child.LayerRoot].Dirty.Add(geometry.Bounds);
}
if (visual != null)
{
Deindex(scene, visual);

2
tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs

@ -415,6 +415,7 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph
Assert.Equal(1, borderNode.DrawOperations.Count);
Assert.Null(result.FindNode(decorator));
Assert.Equal(new Rect(0, 0, 100, 100), result.Layers.Single().Dirty.Single());
}
}
@ -458,6 +459,7 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph
Assert.Null(result.FindNode(border));
Assert.Null(result.FindNode(canvas));
Assert.Equal(new Rect(0, 0, 100, 100), result.Layers.Single().Dirty.Single());
}
}

Loading…
Cancel
Save