@@ -234,6 +234,7 @@ public abstract class StructureNode : Node, IReadOnlyStructureNode, IBackgroundI
public override void Dispose()
{
+ Output.Value = null;
base.Dispose();
maskPaint.Dispose();
blendPaint.Dispose();
@@ -20,5 +20,6 @@ public interface ISurfaceImplementation
public void Flush(DrawingSurface drawingSurface);
public DrawingSurface FromNative(object native);
public RectI GetDeviceClipBounds(DrawingSurface surface);
+ public void Unmanage(DrawingSurface surface);
}
@@ -91,5 +91,10 @@ namespace PixiEditor.DrawingApi.Core.Surfaces
return DrawingBackendApi.Current.SurfaceImplementation.FromNative(native);
+
+ public static void Unmanage(DrawingSurface surface)
+ {
+ DrawingBackendApi.Current.SurfaceImplementation.Unmanage(surface);
+ }
@@ -172,5 +172,11 @@ namespace PixiEditor.DrawingApi.Skia.Implementations
SKRectI rect = ManagedInstances[surface.ObjectPointer].Canvas.DeviceClipBounds;
return new RectI(rect.Left, rect.Top, rect.Width, rect.Height);
+ public void Unmanage(DrawingSurface surface)
+ _canvasImplementation.ManagedInstances.TryRemove(surface.Canvas.ObjectPointer, out _);
+ ManagedInstances.TryRemove(surface.ObjectPointer, out _);
@@ -546,6 +546,7 @@ internal class DrawSceneOperation : SkiaDrawOperation
RenderScene?.Invoke(surface);
canvas.RestoreToCount(count);
+ DrawingSurface.Unmanage(surface);
private void RenderOnionSkin(SKCanvas canvas, SKPaint paint)