From 25e0ed536592e25afe2a76b78f825ddb2dc1b677 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Mon, 23 Sep 2019 23:27:41 +0200 Subject: [PATCH] Revert "Handle reparenting controls in SceneBuilder." This reverts commit db8751d71164f866d4b3acb59cd3e13900096239. The change was incorrect, it causes #3019. --- .../Rendering/DeferredRenderer.cs | 2 +- .../Rendering/SceneGraph/VisualNode.cs | 15 +++------------ .../Rendering/SceneGraph/SceneBuilderTests.cs | 4 ++-- .../Rendering/SceneGraph/VisualNodeTests.cs | 2 +- 4 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs index 0ff0285a04c..efcc5551598 100644 --- a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs +++ b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs @@ -540,7 +540,7 @@ private void UpdateScene() foreach (var visual in _recalculateChildren) { var node = scene.FindNode(visual); - ((VisualNode)node)?.UpdateChildren(scene); + ((VisualNode)node)?.SortChildren(scene); } _recalculateChildren.Clear(); diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs index f079023c6d2..f579bf0a62d 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs +++ b/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs @@ -174,12 +174,12 @@ public void ReplaceDrawOperation(int index, IRef operation) /// /// Sorts the collection according to the order of the visual's - /// children and their z-index and removes controls that are no longer children. + /// children and their z-index. /// /// The scene that the node is a part of. - public void UpdateChildren(Scene scene) + public void SortChildren(Scene scene) { - if (_children == null || _children.Count == 0) + if (_children == null || _children.Count <= 1) { return; } @@ -193,12 +193,9 @@ public void UpdateChildren(Scene scene) keys.Add(((long)zIndex << 32) + i); } - var toRemove = _children.ToList(); - keys.Sort(); _children.Clear(); - foreach (var i in keys) { var child = Visual.VisualChildren[(int)(i & 0xffffffff)]; @@ -207,14 +204,8 @@ public void UpdateChildren(Scene scene) if (node != null) { _children.Add(node); - toRemove.Remove(node); } } - - foreach (var node in toRemove) - { - scene.Remove(node); - } } /// diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs b/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs index dcf23e94e2e..13bcd27240e 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs +++ b/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/SceneBuilderTests.cs @@ -521,8 +521,8 @@ public void Should_Update_When_Control_Moved() moveFromNode = (VisualNode)scene.FindNode(moveFrom); moveToNode = (VisualNode)scene.FindNode(moveTo); - moveFromNode.UpdateChildren(scene); - moveToNode.UpdateChildren(scene); + moveFromNode.SortChildren(scene); + moveToNode.SortChildren(scene); sceneBuilder.Update(scene, moveFrom); sceneBuilder.Update(scene, moveTo); sceneBuilder.Update(scene, moveMe); diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/VisualNodeTests.cs b/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/VisualNodeTests.cs index d4f7a6a142a..24ba2d1c487 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/VisualNodeTests.cs +++ b/tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/VisualNodeTests.cs @@ -99,7 +99,7 @@ public void SortChildren_Does_Not_Throw_On_Null_Children() var node = new VisualNode(Mock.Of(), null); var scene = new Scene(Mock.Of()); - node.UpdateChildren(scene); + node.SortChildren(scene); } } }