parseStyle method
dynamic
parseStyle(
- dynamic node,
- dynamic style
Implementation
parseStyle(node, style) {
// style = Object.assign( {}, style );
// clone style
Map<String, dynamic> style2 = <String, dynamic>{};
style2.addAll(style);
var stylesheetStyles = {};
if (node.hasAttribute('class')) {
var _reg = RegExp(r"\s");
var classSelectors = node
.getAttribute('class')
.split(_reg)
// .filter( Boolean )
.map((i) => i.trim())
.toList();
for (var i = 0; i < classSelectors.length; i++) {
// stylesheetStyles = Object.assign( stylesheetStyles, stylesheets[ '.' + classSelectors[ i ] ] );
stylesheetStyles.addAll(stylesheets['.' + classSelectors[i]] ?? {});
}
}
if (node.hasAttribute('id')) {
// stylesheetStyles = Object.assign( stylesheetStyles, stylesheets[ '#' + node.getAttribute( 'id' ) ] );
stylesheetStyles.addAll(stylesheets['#' + node.getAttribute('id')] ?? {});
}
void addStyle(svgName, jsName, [adjustFunction]) {
adjustFunction ??= (v) {
if (v.startsWith('url')) {
print('SVGLoader: url access in attributes is not implemented.');
}
return v;
};
if (node.hasAttribute(svgName)) {
style2[jsName] = adjustFunction(node.getAttribute(svgName));
}
if (stylesheetStyles[svgName] != null) {
style2[jsName] = adjustFunction(stylesheetStyles[svgName]);
}
if (node.style != null) {
var _style = node.style;
var _value = _style.getPropertyValue(svgName);
if (_value != "") {
// print("svgName: ${svgName} value: ${_value} ");
style2[jsName] = adjustFunction(_value);
}
}
}
num clamp(v) {
return Math.max<num>(0, Math.min(1, parseFloatWithUnits(v)));
}
num positive(v) {
return Math.max<num>(0, parseFloatWithUnits(v));
}
addStyle('fill', 'fill');
addStyle('fill-opacity', 'fillOpacity', clamp);
addStyle('fill-rule', 'fillRule');
addStyle('opacity', 'opacity', clamp);
addStyle('stroke', 'stroke');
addStyle('stroke-opacity', 'strokeOpacity', clamp);
addStyle('stroke-width', 'strokeWidth', positive);
addStyle('stroke-linejoin', 'strokeLineJoin');
addStyle('stroke-linecap', 'strokeLineCap');
addStyle('stroke-miterlimit', 'strokeMiterLimit', positive);
addStyle('visibility', 'visibility');
return style2;
}