89 lines
2.7 KiB
JavaScript
89 lines
2.7 KiB
JavaScript
/**
|
|
*
|
|
*/
|
|
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
|
|
}
|
|
}
|
|
}
|