mapStyleToAttrs.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { DEFAULT_PATH_STYLE } from '../graphic/Path.js';
  2. import ZRImage from '../graphic/Image.js';
  3. import { getLineDash } from '../canvas/dashStyle.js';
  4. import { map } from '../core/util.js';
  5. import { normalizeColor } from './helper.js';
  6. var NONE = 'none';
  7. var mathRound = Math.round;
  8. function pathHasFill(style) {
  9. var fill = style.fill;
  10. return fill != null && fill !== NONE;
  11. }
  12. function pathHasStroke(style) {
  13. var stroke = style.stroke;
  14. return stroke != null && stroke !== NONE;
  15. }
  16. var strokeProps = ['lineCap', 'miterLimit', 'lineJoin'];
  17. var svgStrokeProps = map(strokeProps, function (prop) { return "stroke-" + prop.toLowerCase(); });
  18. export default function mapStyleToAttrs(updateAttr, style, el, forceUpdate) {
  19. var opacity = style.opacity == null ? 1 : style.opacity;
  20. if (el instanceof ZRImage) {
  21. updateAttr('opacity', opacity);
  22. return;
  23. }
  24. if (pathHasFill(style)) {
  25. var fill = normalizeColor(style.fill);
  26. updateAttr('fill', fill.color);
  27. var fillOpacity = style.fillOpacity != null
  28. ? style.fillOpacity * fill.opacity * opacity
  29. : fill.opacity * opacity;
  30. if (forceUpdate || fillOpacity < 1) {
  31. updateAttr('fill-opacity', fillOpacity);
  32. }
  33. }
  34. else {
  35. updateAttr('fill', NONE);
  36. }
  37. if (pathHasStroke(style)) {
  38. var stroke = normalizeColor(style.stroke);
  39. updateAttr('stroke', stroke.color);
  40. var strokeScale = style.strokeNoScale
  41. ? el.getLineScale()
  42. : 1;
  43. var strokeWidth = (strokeScale ? (style.lineWidth || 0) / strokeScale : 0);
  44. var strokeOpacity = style.strokeOpacity != null
  45. ? style.strokeOpacity * stroke.opacity * opacity
  46. : stroke.opacity * opacity;
  47. var strokeFirst = style.strokeFirst;
  48. if (forceUpdate || strokeWidth !== 1) {
  49. updateAttr('stroke-width', strokeWidth);
  50. }
  51. if (forceUpdate || strokeFirst) {
  52. updateAttr('paint-order', strokeFirst ? 'stroke' : 'fill');
  53. }
  54. if (forceUpdate || strokeOpacity < 1) {
  55. updateAttr('stroke-opacity', strokeOpacity);
  56. }
  57. if (style.lineDash) {
  58. var _a = getLineDash(el), lineDash = _a[0], lineDashOffset = _a[1];
  59. if (lineDash) {
  60. lineDashOffset = mathRound(lineDashOffset || 0);
  61. updateAttr('stroke-dasharray', lineDash.join(','));
  62. if (lineDashOffset || forceUpdate) {
  63. updateAttr('stroke-dashoffset', lineDashOffset);
  64. }
  65. }
  66. }
  67. else if (forceUpdate) {
  68. updateAttr('stroke-dasharray', NONE);
  69. }
  70. for (var i = 0; i < strokeProps.length; i++) {
  71. var propName = strokeProps[i];
  72. if (forceUpdate || style[propName] !== DEFAULT_PATH_STYLE[propName]) {
  73. var val = style[propName] || DEFAULT_PATH_STYLE[propName];
  74. val && updateAttr(svgStrokeProps[i], val);
  75. }
  76. }
  77. }
  78. else if (forceUpdate) {
  79. updateAttr('stroke', NONE);
  80. }
  81. }