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.InitializeComponent();
this.AttachDevTools(); this.AttachDevTools();
//Renderer.DrawDirtyRects = Renderer.DrawFps = true; Renderer.DrawDirtyRects = Renderer.DrawFps = true;
} }
private void InitializeComponent() private void InitializeComponent()

16
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)

Loading…
Cancel
Save