Преглед на файлове

Handle detached visuals in dirty list.

Steven Kirk преди 9 години
родител
ревизия
74c263ee8f
променени са 2 файла, в които са добавени 16 реда и са изтрити 2 реда
  1. 1 1
      samples/ControlCatalog/MainWindow.xaml.cs
  2. 15 1
      src/Avalonia.Visuals/Rendering/DirtyVisuals.cs

+ 1 - 1
samples/ControlCatalog/MainWindow.xaml.cs

@@ -10,7 +10,7 @@ namespace ControlCatalog
         {
         {
             this.InitializeComponent();
             this.InitializeComponent();
             this.AttachDevTools();
             this.AttachDevTools();
-            //Renderer.DrawDirtyRects = Renderer.DrawFps = true;
+            Renderer.DrawDirtyRects = Renderer.DrawFps = true;
         }
         }
 
 
         private void InitializeComponent()
         private void InitializeComponent()

+ 15 - 1
src/Avalonia.Visuals/Rendering/DirtyVisuals.cs

@@ -14,7 +14,7 @@ namespace Avalonia.Rendering
 
 
         public void Add(IVisual visual)
         public void Add(IVisual visual)
         {
         {
-            var distance = visual.CalculateDistanceFromVisualRoot();
+            var distance = visual.IsAttachedToVisualTree ? visual.CalculateDistanceFromVisualRoot() : -1;
             int existingDistance;
             int existingDistance;
 
 
             if (_index.TryGetValue(visual, out existingDistance))
             if (_index.TryGetValue(visual, out existingDistance))
@@ -46,6 +46,20 @@ namespace Avalonia.Rendering
             _index.Clear();
             _index.Clear();
         }
         }
 
 
+        public bool Remove(IVisual visual)
+        {
+            int distance;
+
+            if (_index.TryGetValue(visual, out distance))
+            {
+                _inner[distance].Remove(visual);
+                _index.Remove(visual);
+                return true;
+            }
+
+            return false;
+        }
+
         public IEnumerator<IVisual> GetEnumerator()
         public IEnumerator<IVisual> GetEnumerator()
         {
         {
             foreach (var i in _inner)
             foreach (var i in _inner)