UNPKG

svgedit

Version:

Powerful SVG-Editor for your browser

88 lines (87 loc) 2.77 kB
/** * */ export default class Paint { /** * @param {module:jGraduate.jGraduatePaintOptions} [opt] */ constructor (opt) { const options = opt || {}; this.alpha = isNaN(options.alpha) ? 100 : options.alpha; // copy paint object if (options.copy) { /** * @name module:jGraduate~Paint#type * @type {"none"|"solidColor"|"linearGradient"|"radialGradient"} */ this.type = options.copy.type; /** * Represents opacity (0-100). * @name module:jGraduate~Paint#alpha * @type {Float} */ this.alpha = options.copy.alpha; /** * Represents #RRGGBB hex of color. * @name module:jGraduate~Paint#solidColor * @type {string} */ this.solidColor = null; /** * @name module:jGraduate~Paint#linearGradient * @type {SVGLinearGradientElement} */ this.linearGradient = null; /** * @name module:jGraduate~Paint#radialGradient * @type {SVGRadialGradientElement} */ this.radialGradient = null; switch (this.type) { case 'none': break; case 'solidColor': this.solidColor = options.copy.solidColor; break; case 'linearGradient': this.linearGradient = options.copy.linearGradient.cloneNode(true); break; case 'radialGradient': this.radialGradient = options.copy.radialGradient.cloneNode(true); break; } // create linear gradient paint } else if (options.linearGradient) { this.type = 'linearGradient'; this.solidColor = null; this.radialGradient = null; if(options.linearGradient.hasAttribute('xlink:href')) { const xhref = document.getElementById(options.linearGradient.getAttribute('xlink:href').substr(1)); this.linearGradient = xhref.cloneNode(true); } else { this.linearGradient = options.linearGradient.cloneNode(true); } // create linear gradient paint } else if (options.radialGradient) { this.type = 'radialGradient'; this.solidColor = null; this.linearGradient = null; if(options.radialGradient.hasAttribute('xlink:href')) { const xhref = document.getElementById(options.radialGradient.getAttribute('xlink:href').substr(1)); this.radialGradient = xhref.cloneNode(true); } else { this.radialGradient = options.radialGradient.cloneNode(true); } // create solid color paint } else if (options.solidColor) { this.type = 'solidColor'; this.solidColor = options.solidColor; // create empty paint } else { this.type = 'none'; this.solidColor = null; this.linearGradient = null; this.radialGradient = null; } } }