Browse Source

Don't remove root layer when hiding root.

Steven Kirk 8 years ago
parent
commit
0f81420ee2

+ 1 - 1
src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs

@@ -274,7 +274,7 @@ namespace Avalonia.Rendering.SceneGraph
                 }
             }
 
-            if (node.LayerRoot == node.Visual)
+            if (node.LayerRoot == node.Visual && node.Visual != scene.Root.Visual)
             {
                 scene.Layers.Remove(node.LayerRoot);
             }

+ 27 - 0
tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests_Layers.cs

@@ -273,5 +273,32 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph
                     ((MockStreamGeometryImpl)borderLayer.GeometryClip).Transform);
             }
         }
+
+        [Fact]
+        public void Hiding_Root_Should_Not_Remove_Root_Layer()
+        {
+            using (TestApplication())
+            {
+                Border border;
+                var tree = new TestRoot
+                {
+                    Child = border = new Border()
+                };
+
+                var layout = AvaloniaLocator.Current.GetService<ILayoutManager>();
+                layout.ExecuteInitialLayoutPass(tree);
+
+                var scene = new Scene(tree);
+                var sceneBuilder = new SceneBuilder();
+                sceneBuilder.UpdateAll(scene);
+
+                tree.IsVisible = false;
+
+                scene = scene.Clone();
+                sceneBuilder.Update(scene, tree);
+
+                Assert.Equal(1, scene.Layers.Count);
+            }
+        }
     }
 }