public PolylineDrawable(SvgPolyline svgPolyline, SKRect skOwnerBounds, Drawable?root, Drawable?parent, Attributes ignoreAttributes = Attributes.None) : base(svgPolyline, root, parent) { IgnoreAttributes = ignoreAttributes; IsDrawable = CanDraw(svgPolyline, IgnoreAttributes) && HasFeatures(svgPolyline, IgnoreAttributes); if (!IsDrawable) { return; } Path = svgPolyline.Points?.ToSKPath(svgPolyline.FillRule, false, skOwnerBounds, _disposable); if (Path == null || Path.IsEmpty) { IsDrawable = false; return; } IsAntialias = SvgPaintingExtensions.IsAntialias(svgPolyline); TransformedBounds = Path.Bounds; Transform = SvgTransformsExtensions.ToSKMatrix(svgPolyline.Transforms); bool canDrawFill = true; bool canDrawStroke = true; if (SvgPaintingExtensions.IsValidFill(svgPolyline)) { Fill = SvgPaintingExtensions.GetFillSKPaint(svgPolyline, TransformedBounds, ignoreAttributes, _disposable); if (Fill == null) { canDrawFill = false; } } if (SvgPaintingExtensions.IsValidStroke(svgPolyline, TransformedBounds)) { Stroke = SvgPaintingExtensions.GetStrokeSKPaint(svgPolyline, TransformedBounds, ignoreAttributes, _disposable); if (Stroke == null) { canDrawStroke = false; } } if (canDrawFill && !canDrawStroke) { IsDrawable = false; return; } SvgMarkerExtensions.CreateMarkers(svgPolyline, Path, skOwnerBounds, ref MarkerDrawables, _disposable); // TODO: Transform _skBounds using _skMatrix. TransformedBounds = Transform.MapRect(TransformedBounds); }
public GroupDrawable(SvgGroup svgGroup, SKRect skOwnerBounds, Drawable?root, Drawable?parent, Attributes ignoreAttributes = Attributes.None) : base(svgGroup, root, parent) { IgnoreAttributes = ignoreAttributes; IsDrawable = CanDraw(svgGroup, IgnoreAttributes) && HasFeatures(svgGroup, IgnoreAttributes); // NOTE: Call AddMarkers only once. SvgMarkerExtensions.AddMarkers(svgGroup); CreateChildren(svgGroup, skOwnerBounds, root, this, ignoreAttributes); // TODO: Check if children are explicitly set to be visible. //foreach (var child in ChildrenDrawables) //{ // if (child.IsDrawable) // { // IsDrawable = true; // break; // } //} if (!IsDrawable) { return; } IsAntialias = SvgPaintingExtensions.IsAntialias(svgGroup); TransformedBounds = SKRect.Empty; CreateTransformedBounds(); Transform = SvgTransformsExtensions.ToSKMatrix(svgGroup.Transforms); Fill = null; Stroke = null; // TODO: Transform _skBounds using _skMatrix. TransformedBounds = Transform.MapRect(TransformedBounds); }