/// <summary> /// Gets an overflow attribute /// </summary> /// <param name="name">Attribute name</param> /// <param name="overflow">When this returns , contains the attribute value</param> public unsafe void GetAttributeValue(string name, out SvgOverflow overflow) { fixed(SvgOverflow *ptr = &overflow) { GetAttributeValue(name, SvgAttributePodType.Overflow, new IntPtr(ptr), sizeof(SvgOverflow)); } }
/// <summary> /// Sets overflow mode attribute /// </summary> /// <param name="name">Attribute name</param> /// <param name="overflow">New svg overfloe<param> public unsafe void SetAttributeValue(string name, SvgOverflow overflow) { SetAttributeValue(name, SvgAttributePodType.Overflow, new IntPtr(&overflow), sizeof(SvgOverflow)); }
public SymbolDrawable(SvgSymbol svgSymbol, float x, float y, float width, float height, SKRect skOwnerBounds, Drawable?root, Drawable?parent, Attributes ignoreAttributes) : base(svgSymbol, root, parent) { IgnoreAttributes = ignoreAttributes; IsDrawable = CanDraw(svgSymbol, IgnoreAttributes) && HasFeatures(svgSymbol, IgnoreAttributes); if (!IsDrawable) { return; } if (svgSymbol.CustomAttributes.TryGetValue("width", out string?_widthString)) { if (new SvgUnitConverter().ConvertFromString(_widthString) is SvgUnit _width) { width = _width.ToDeviceValue(UnitRenderingType.Horizontal, svgSymbol, skOwnerBounds); } } if (svgSymbol.CustomAttributes.TryGetValue("height", out string?heightString)) { if (new SvgUnitConverter().ConvertFromString(heightString) is SvgUnit _height) { height = _height.ToDeviceValue(UnitRenderingType.Vertical, svgSymbol, skOwnerBounds); } } SvgOverflow svgOverflow = SvgOverflow.Hidden; if (svgSymbol.TryGetAttribute("overflow", out string overflowString)) { if (new SvgOverflowConverter().ConvertFromString(overflowString) is SvgOverflow _svgOverflow) { svgOverflow = _svgOverflow; } } switch (svgOverflow) { case SvgOverflow.Auto: case SvgOverflow.Visible: case SvgOverflow.Inherit: break; default: Overflow = SKRect.Create(x, y, width, height); break; } CreateChildren(svgSymbol, skOwnerBounds, root, this, ignoreAttributes); IsAntialias = SvgPaintingExtensions.IsAntialias(svgSymbol); TransformedBounds = SKRect.Empty; CreateTransformedBounds(); Transform = SvgTransformsExtensions.ToSKMatrix(svgSymbol.Transforms); var skMatrixViewBox = SvgTransformsExtensions.ToSKMatrix(svgSymbol.ViewBox, svgSymbol.AspectRatio, x, y, width, height); Transform = Transform.PreConcat(skMatrixViewBox); Fill = null; Stroke = null; // TODO: Transform _skBounds using _skMatrix. TransformedBounds = Transform.MapRect(TransformedBounds); }