public static FragmentDrawable Create(SvgFragment svgFragment, SKRect skViewport, DrawableBase?parent, IAssetLoader assetLoader, HashSet <Uri>?references, DrawAttributes ignoreAttributes = DrawAttributes.None) { var drawable = new FragmentDrawable(assetLoader, references) { Element = svgFragment, Parent = parent, IgnoreAttributes = ignoreAttributes }; drawable.IsDrawable = drawable.HasFeatures(svgFragment, drawable.IgnoreAttributes); if (!drawable.IsDrawable) { return(drawable); } var svgFragmentParent = svgFragment.Parent; var x = svgFragmentParent is null ? 0f : svgFragment.X.ToDeviceValue(UnitRenderingType.Horizontal, svgFragment, skViewport); var y = svgFragmentParent is null ? 0f : svgFragment.Y.ToDeviceValue(UnitRenderingType.Vertical, svgFragment, skViewport); var skSize = SvgExtensions.GetDimensions(svgFragment); if (skViewport.IsEmpty) { skViewport = SKRect.Create(x, y, skSize.Width, skSize.Height); } drawable.CreateChildren(svgFragment, skViewport, drawable, assetLoader, references, ignoreAttributes); drawable.Initialize(skViewport, x, y, skSize); return(drawable); }
public static SP.Picture?ToModel(SvgFragment svgFragment) { var size = SvgExtensions.GetDimensions(svgFragment); var bounds = SP.Rect.Create(size); using var drawable = DrawableFactory.Create(svgFragment, bounds, null, Attributes.None); if (drawable == null) { return(null); } drawable.PostProcess(); if (bounds.IsEmpty) { var drawableBounds = drawable.Bounds; bounds = SP.Rect.Create( 0f, 0f, Math.Abs(drawableBounds.Left) + drawableBounds.Width, Math.Abs(drawableBounds.Top) + drawableBounds.Height); } return(drawable.Snapshot(bounds)); }