Browse Source

Handle detached visuals in dirty list.

scenegraph-after-breakage
Steven Kirk 10 years ago
parent
commit
74c263ee8f
  1. 2
      samples/ControlCatalog/MainWindow.xaml.cs
  2. 16
      src/Avalonia.Visuals/Rendering/DirtyVisuals.cs

2
samples/ControlCatalog/MainWindow.xaml.cs

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

16
src/Avalonia.Visuals/Rendering/DirtyVisuals.cs

@ -14,7 +14,7 @@ namespace Avalonia.Rendering
public void Add(IVisual visual)
{
var distance = visual.CalculateDistanceFromVisualRoot();
var distance = visual.IsAttachedToVisualTree ? visual.CalculateDistanceFromVisualRoot() : -1;
int existingDistance;
if (_index.TryGetValue(visual, out existingDistance))
@ -46,6 +46,20 @@ namespace Avalonia.Rendering
_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()
{
foreach (var i in _inner)

Loading…
Cancel
Save