SvgRadialGradient.fromXml constructor
SvgRadialGradient.fromXml(
- XmlElement element,
- SvgPainter painter
Implementation
factory SvgRadialGradient.fromXml(XmlElement element, SvgPainter painter) {
final r =
SvgParser.getNumeric(element, 'r', null, defaultValue: .5)!.sizeValue;
final cx =
SvgParser.getNumeric(element, 'cx', null, defaultValue: .5)!.sizeValue;
final cy =
SvgParser.getNumeric(element, 'cy', null, defaultValue: .5)!.sizeValue;
final fr =
SvgParser.getNumeric(element, 'fr', null, defaultValue: 0)!.sizeValue;
final fx =
SvgParser.getNumeric(element, 'fx', null, defaultValue: cx)!.sizeValue;
final fy =
SvgParser.getNumeric(element, 'fy', null, defaultValue: cy)!.sizeValue;
final colors = <PdfColor?>[];
final stops = <double>[];
final opacityList = <double>[];
for (final child in element.children
.whereType<XmlElement>()
.where((e) => e.name.local == 'stop')) {
SvgParser.convertStyle(child);
final color = SvgColor.fromXml(
child.getAttribute('stop-color') ?? 'black', painter);
final opacity =
SvgParser.getDouble(child, 'stop-opacity', defaultValue: 1);
final stop = SvgParser.getNumeric(child, 'offset', null, defaultValue: 0)!
.sizeValue;
colors.add(color.color);
stops.add(stop);
opacityList.add(opacity!);
}
GradientUnits? gradientUnits;
switch (element.getAttribute('gradientUnits')) {
case 'userSpaceOnUse':
gradientUnits = GradientUnits.userSpaceOnUse;
break;
case 'objectBoundingBox':
gradientUnits = GradientUnits.objectBoundingBox;
break;
}
final result = SvgRadialGradient(
gradientUnits,
r,
cx,
cy,
fr,
fx,
fy,
SvgTransform.fromString(element.getAttribute('gradientTransform')),
colors,
stops,
opacityList);
SvgRadialGradient href;
final hrefAttr = element.getAttribute('href') ??
element.getAttribute('href', namespace: 'http://www.w3.org/1999/xlink');
if (hrefAttr != null) {
final hrefElement = painter.parser.findById(hrefAttr.substring(1));
if (hrefElement != null) {
href = SvgRadialGradient.fromXml(hrefElement, painter);
return href.mergeWith(result);
}
}
return result;
}