public void SetShape(IVisualElementRenderer renderer, IBackgroundShape newShape) { _renderer = renderer; if (_shape != newShape) { if (_shape != null) { _shape.ShapeInvalidateRequested -= OnShapeInvalidateRequested; } if (newShape != null) { newShape.ShapeInvalidateRequested += OnShapeInvalidateRequested; } _shape = newShape; _pathProvider?.Dispose(); _pathProvider = PathProvidersContainer.Resolve(_shape.GetType()); if (_pathProvider != null) { _pathProvider.SetShape(newShape); _renderer?.NativeView?.FindLayerOfType <GradientStrokeLayer>()?.SetPathProvider(_pathProvider); } } Invalidate(); }
protected override void Dispose(bool disposing) { if (disposing) { if (_pathProvider != null) { _pathProvider.Dispose(); _pathProvider = null; } _shadowLayer.RemoveFromSuperLayer(); _shadowLayer.Dispose(); _shadowLayer = null; if (_gradientProvider != null) { _gradientProvider.Dispose(); _gradientProvider = null; } if (_strokeGradientProvider != null) { _strokeGradientProvider.Dispose(); _strokeGradientProvider = null; } } base.Dispose(disposing); }