public override void Draw(SKCanvas canvas, RectangleF dirtyRect) { canvas.Clear(Color.Transparent.ToSKColor()); if (TypedVirtualView == null || drawMapper == null) { return; } canvas.Save(); var layers = LayerDrawingOrder(); var padding = this.GetPadding(); var rect = dirtyRect.ApplyPadding(padding); foreach (var layer in layers) { drawMapper.DrawLayer(canvas, rect, this, TypedVirtualView, layer); } var clipShape = VirtualView?.GetClipShape() ?? VirtualView?.GetBorder(); if (clipShape != null) { canvas.ClipPath(clipShape.PathForBounds(rect).ToSKPath()); } drawMapper.DrawLayer(canvas, rect, this, TypedVirtualView, SkiaEnvironmentKeys.Border); canvas.Restore(); }