From 059b93723728b1bb62c9e32131e7a837f1018207 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Wed, 1 Mar 2017 00:41:06 +0100 Subject: [PATCH] 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. --- src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs | 7 ++----- .../Rendering/SceneGraph/SceneBuilderTests.cs | 2 ++ 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs index e472192c38..7adebcd1dc 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs +++ b/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); diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs b/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs index af3abb0136..c51e8941a9 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs +++ b/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()); } }