createSvgNode method

  1. @override
XmlElement createSvgNode(
  1. ChantContext ctxt, [
  2. ChantLayoutElement? source
])
override

Generates SVG representation of the element.

Implementation

@override
XmlElement createSvgNode(ChantContext ctxt, [ChantLayoutElement? source]) {
  final options = getSvgProps();
  final extraStyleProperties = getExtraStyleProperties(ctxt);
  if (extraStyleProperties['class'] != null) {
    options['class'] = '${extraStyleProperties['class']} ${options['class']}';
  }
  if (ctxt.stylingMode == .attributes) {
    final ts = ctxt.textStyles;
    options.addAll({
      for (final c in (options['class'] as String).split(" "))
        if (ts.containsKey(c)) ...{
          'fill': (ts[c]['color'] as Color? ?? ctxt.theme.textColor)
              .toSvgString(),
          'font-family': ts[c]['font'] ?? 'serif',
          'font-size': ts[c]['size'] ?? 16,
        },
      for (final e in extraStyleProperties.entries)
        e.key: e.value is Color ? (e.value as Color).toSvgString() : e.value,
    });
  } else {
    options['style'] = getCssForProperties(extraStyleProperties);
  }
  return QuickSvg.createNode('text', options, [
    for (final span in spans)
      QuickSvg.createNode('tspan', getSpanOptions(span, ctxt), span.text),
  ]);
}