Răsfoiți Sursa

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.
Steven Kirk 8 ani în urmă
părinte
comite
059b937237

+ 2 - 5
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 - 0
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());
             }
         }