|
|
@@ -327,31 +327,36 @@ namespace Avalonia.Rendering.SceneGraph
|
|
|
if (_drawOperations == null)
|
|
|
{
|
|
|
_drawOperations = new List<IRef<IDrawOperation>>();
|
|
|
- _drawOperationsRefCounter = RefCountable.Create(Disposable.Create(DisposeDrawOperations));
|
|
|
+ _drawOperationsRefCounter = RefCountable.Create(CreateDisposeDrawOperations(_drawOperations));
|
|
|
_drawOperationsCloned = false;
|
|
|
}
|
|
|
else if (_drawOperationsCloned)
|
|
|
{
|
|
|
_drawOperations = new List<IRef<IDrawOperation>>(_drawOperations.Select(op => op.Clone()));
|
|
|
_drawOperationsRefCounter.Dispose();
|
|
|
- _drawOperationsRefCounter = RefCountable.Create(Disposable.Create(DisposeDrawOperations));
|
|
|
+ _drawOperationsRefCounter = RefCountable.Create(CreateDisposeDrawOperations(_drawOperations));
|
|
|
_drawOperationsCloned = false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public bool Disposed { get; }
|
|
|
-
|
|
|
- public void Dispose()
|
|
|
+ private static IDisposable CreateDisposeDrawOperations(List<IRef<IDrawOperation>> drawOperations)
|
|
|
{
|
|
|
- _drawOperationsRefCounter?.Dispose();
|
|
|
+ return Disposable.Create(() =>
|
|
|
+ {
|
|
|
+ foreach (var operation in drawOperations)
|
|
|
+ {
|
|
|
+ operation.Dispose();
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
- private void DisposeDrawOperations()
|
|
|
+ public bool Disposed { get; private set; }
|
|
|
+
|
|
|
+ public void Dispose()
|
|
|
{
|
|
|
- foreach (var operation in DrawOperations)
|
|
|
- {
|
|
|
- operation.Dispose();
|
|
|
- }
|
|
|
+ _drawOperationsRefCounter?.Dispose();
|
|
|
+
|
|
|
+ Disposed = true;
|
|
|
}
|
|
|
}
|
|
|
}
|