| 
					
				 | 
			
			
				@@ -38,8 +38,10 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 tree.Arrange(new Rect(tree.DesiredSize)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var result = new Scene(tree); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                SceneBuilder.UpdateAll(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var sceneBuilder = new SceneBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sceneBuilder.UpdateAll(result, new LayerDirtyRects()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Same(tree, ((VisualNode)result.Root).LayerRoot); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Assert.Equal(1, result.Root.Children.Count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var borderNode = (VisualNode)result.Root.Children[0]; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -85,14 +87,15 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 tree.Arrange(new Rect(tree.DesiredSize)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var result = new Scene(tree); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                SceneBuilder.UpdateAll(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var sceneBuilder = new SceneBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sceneBuilder.UpdateAll(result, new LayerDirtyRects()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var canvasNode = result.FindNode(canvas); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Assert.Equal(new Rect(10, 20, 160, 240), canvasNode.ClipBounds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // Initial ClipBounds are correct, make sure they're still correct after updating canvas. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 result = result.Clone(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Assert.True(SceneBuilder.Update(result, canvas)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.True(sceneBuilder.Update(result, canvas, new LayerDirtyRects())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 canvasNode = result.FindNode(canvas); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Assert.Equal(new Rect(10, 20, 160, 240), canvasNode.ClipBounds); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -134,14 +137,15 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 tree.Arrange(new Rect(tree.DesiredSize)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var scene = new Scene(tree); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                SceneBuilder.UpdateAll(scene); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var sceneBuilder = new SceneBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sceneBuilder.UpdateAll(scene, new LayerDirtyRects()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var borderNode = scene.FindNode(border); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Assert.Equal(new Rect(50, 50, 50, 50), borderNode.ClipBounds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // Initial ClipBounds are correct, make sure they're still correct after updating border. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 scene = scene.Clone(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Assert.True(SceneBuilder.Update(scene, border)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.True(sceneBuilder.Update(scene, border, new LayerDirtyRects())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 borderNode = scene.FindNode(border); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Assert.Equal(new Rect(50, 50, 50, 50), borderNode.ClipBounds); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -174,7 +178,8 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var result = new Scene(tree); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                SceneBuilder.UpdateAll(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var sceneBuilder = new SceneBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sceneBuilder.UpdateAll(result, new LayerDirtyRects()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var panelNode = result.FindNode(tree.Child); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var expected = new IVisual[] { back, front }; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -207,7 +212,8 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 tree.Arrange(new Rect(tree.DesiredSize)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var result = new Scene(tree); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                SceneBuilder.UpdateAll(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var sceneBuilder = new SceneBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sceneBuilder.UpdateAll(result, new LayerDirtyRects()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var targetNode = result.FindNode(target); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -241,7 +247,8 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 tree.Arrange(new Rect(tree.DesiredSize)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var initial = new Scene(tree); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                SceneBuilder.UpdateAll(initial); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var sceneBuilder = new SceneBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sceneBuilder.UpdateAll(initial, new LayerDirtyRects()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var initialBackgroundNode = initial.FindNode(border).Children[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var initialTextNode = initial.FindNode(textBlock).DrawOperations[0]; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -252,7 +259,7 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 border.Background = Brushes.Green; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var result = initial.Clone(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                SceneBuilder.Update(result, border); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sceneBuilder.Update(result, border, new LayerDirtyRects()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var borderNode = (VisualNode)result.Root.Children[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Assert.Same(border, borderNode.Visual); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -295,16 +302,17 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 tree.Arrange(new Rect(tree.DesiredSize)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var initial = new Scene(tree); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                SceneBuilder.UpdateAll(initial); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var sceneBuilder = new SceneBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sceneBuilder.UpdateAll(initial, new LayerDirtyRects()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 border.Child = decorator; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var result = initial.Clone(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Assert.True(SceneBuilder.Update(result, decorator)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.True(sceneBuilder.Update(result, decorator, new LayerDirtyRects())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // Updating canvas should result in no-op as it should have been updated along  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // with decorator as part of the add opeation. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Assert.False(SceneBuilder.Update(result, canvas)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.False(sceneBuilder.Update(result, canvas, new LayerDirtyRects())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var borderNode = (VisualNode)result.Root.Children[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Assert.Equal(1, borderNode.Children.Count); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -349,13 +357,14 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 tree.Arrange(new Rect(tree.DesiredSize)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var initial = new Scene(tree); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                SceneBuilder.UpdateAll(initial); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var sceneBuilder = new SceneBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sceneBuilder.UpdateAll(initial, new LayerDirtyRects()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 border.Child = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var result = initial.Clone(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Assert.True(SceneBuilder.Update(result, decorator)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Assert.False(SceneBuilder.Update(result, canvas)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.True(sceneBuilder.Update(result, decorator, new LayerDirtyRects())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.False(sceneBuilder.Update(result, canvas, new LayerDirtyRects())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var borderNode = (VisualNode)result.Root.Children[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Assert.Equal(0, borderNode.Children.Count); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -391,13 +400,14 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 tree.Arrange(new Rect(tree.DesiredSize)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var initial = new Scene(tree); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                SceneBuilder.UpdateAll(initial); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var sceneBuilder = new SceneBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sceneBuilder.UpdateAll(initial, new LayerDirtyRects()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 border.IsVisible = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var result = initial.Clone(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Assert.True(SceneBuilder.Update(result, border)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Assert.False(SceneBuilder.Update(result, canvas)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.True(sceneBuilder.Update(result, border, new LayerDirtyRects())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.False(sceneBuilder.Update(result, canvas, new LayerDirtyRects())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var decoratorNode = (VisualNode)result.Root.Children[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Assert.Equal(0, decoratorNode.Children.Count); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -433,7 +443,8 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 layout.ExecuteInitialLayoutPass(tree); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var scene = new Scene(tree); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                SceneBuilder.UpdateAll(scene); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var sceneBuilder = new SceneBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sceneBuilder.UpdateAll(scene, new LayerDirtyRects()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var borderNode = scene.FindNode(border); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var canvasNode = scene.FindNode(canvas); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -444,7 +455,7 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 layout.ExecuteLayoutPass(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 scene = scene.Clone(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                SceneBuilder.Update(scene, decorator); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sceneBuilder.Update(scene, decorator, new LayerDirtyRects()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 borderNode = scene.FindNode(border); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 canvasNode = scene.FindNode(canvas); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -480,7 +491,8 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 layout.ExecuteInitialLayoutPass(tree); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var scene = new Scene(tree); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                SceneBuilder.UpdateAll(scene); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var sceneBuilder = new SceneBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sceneBuilder.UpdateAll(scene, new LayerDirtyRects()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var borderNode = scene.FindNode(border); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 var canvasNode = scene.FindNode(canvas); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -492,14 +504,79 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 scene = scene.Clone(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var dirty = new DirtyRects(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                SceneBuilder.Update(scene, decorator, dirty); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var dirty = new LayerDirtyRects(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sceneBuilder.Update(scene, decorator, dirty); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var rects = dirty.ToArray(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var rects = dirty.Single().Value.ToArray(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Assert.Equal(new[] { new Rect(0, 10, 100, 90) }, rects); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        [Fact] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public void Control_With_Transparency_Should_Start_New_Layer() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            using (TestApplication()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Decorator decorator; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Border border; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Canvas canvas; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var tree = new TestRoot 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Padding = new Thickness(10), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Width = 100, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Height = 120, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Child = decorator = new Decorator 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Padding = new Thickness(11), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Child = border = new Border 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            Opacity = 0.5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            Background = Brushes.Red, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            Padding = new Thickness(12), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            Child = canvas = new Canvas(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var layout = AvaloniaLocator.Current.GetService<ILayoutManager>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                layout.ExecuteInitialLayoutPass(tree); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var dirty = new LayerDirtyRects(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var scene = new Scene(tree); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var sceneBuilder = new SceneBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sceneBuilder.UpdateAll(scene, dirty); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var rootNode = (VisualNode)scene.Root; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var borderNode = (VisualNode)scene.FindNode(border); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var canvasNode = (VisualNode)scene.FindNode(canvas); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Same(tree, rootNode.LayerRoot); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Same(border, borderNode.LayerRoot); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Same(border, canvasNode.LayerRoot); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Equal(2, dirty.Count()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Empty(dirty.Select(x => x.Key).Except(new IVisual[] { tree, border })); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                border.Opacity = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                scene = scene.Clone(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dirty = new LayerDirtyRects(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sceneBuilder.Update(scene, border, dirty); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rootNode = (VisualNode)scene.Root; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                borderNode = (VisualNode)scene.FindNode(border); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                canvasNode = (VisualNode)scene.FindNode(canvas); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Same(tree, rootNode.LayerRoot); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Same(tree, borderNode.LayerRoot); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Same(tree, canvasNode.LayerRoot); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Equal(1, dirty.Count()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Equal(tree, dirty.Single().Key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Equal(new Rect(21, 21, 58, 78), dirty.Single().Value.Single()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private IDisposable TestApplication() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return UnitTestApplication.Start( 
			 |