diff options
author | Ulrich-Matthias Schäfer <ulima.ums@googlemail.com> | 2018-11-30 13:19:58 +0100 |
---|---|---|
committer | Ulrich-Matthias Schäfer <ulima.ums@googlemail.com> | 2018-11-30 13:19:58 +0100 |
commit | f4531868a190af69c4ecdcf6d7be6d3fc59f5d46 (patch) | |
tree | 1fc76780ad6918ef7b6eb0e302a55f1b043d8bc5 /src/types | |
parent | d64b964d21e1399b198e44555be68a12378053e7 (diff) | |
parent | efc82b0eafa72902b35c2b22cd9e86bdbdd3edfb (diff) | |
download | svg.js-f4531868a190af69c4ecdcf6d7be6d3fc59f5d46.tar.gz svg.js-f4531868a190af69c4ecdcf6d7be6d3fc59f5d46.zip |
Merge branch '3.0.0' into 790-color-spaces
Diffstat (limited to 'src/types')
-rw-r--r-- | src/types/Box.js | 26 | ||||
-rw-r--r-- | src/types/Color.js | 20 | ||||
-rw-r--r-- | src/types/Morphable.js | 253 |
3 files changed, 19 insertions, 280 deletions
diff --git a/src/types/Box.js b/src/types/Box.js index c90c7e0..d2ddcdd 100644 --- a/src/types/Box.js +++ b/src/types/Box.js @@ -104,7 +104,7 @@ export default class Box { } } -function getBox (cb) { +function getBox (cb, retry) { let box try { @@ -114,23 +114,29 @@ function getBox (cb) { throw new Error('Element not in the dom') } } catch (e) { - try { - let clone = this.clone().addTo(parser().svg).show() - box = cb(clone.node) - clone.remove() - } catch (e) { - throw new Error('Getting a bounding box of element "' + this.node.nodeName + '" is not possible') - } + box = retry(this) } + return box } export function bbox () { - return new Box(getBox.call(this, (node) => node.getBBox())) + return new Box(getBox.call(this, (node) => node.getBBox(), (el) => { + try { + let clone = el.clone().addTo(parser().svg).show() + let box = clone.node.getBBox() + clone.remove() + return box + } catch (e) { + throw new Error('Getting bbox of element "' + el.node.nodeName + '" is not possible') + } + })) } export function rbox (el) { - let box = new Box(getBox.call(this, (node) => node.getBoundingClientRect())) + let box = new Box(getBox.call(this, (node) => node.getBoundingClientRect(), (el) => { + throw new Error('Getting rbox of element "' + el.node.nodeName + '" is not possible') + })) if (el) return box.transform(el.screenCTM().inverse()) return box.addOffset() } diff --git a/src/types/Color.js b/src/types/Color.js index 0004251..b745bfd 100644 --- a/src/types/Color.js +++ b/src/types/Color.js @@ -78,7 +78,7 @@ export default class Color { Object.assign(this, { _a: a, _b: b, _c: c, _d: d, space }) // If the user gave us an array, make the color from it } else if (a instanceof Array) { - this.space = b || a[4] || 'rgb' + this.space = b || (typeof a[3] === 'string' ? a[3] : a[4]) || 'rgb' Object.assign(this, { _a: a[0], _b: a[1], _c: a[2], _d: a[3] || 0 }) } else if (a instanceof Object) { // Set the object up and assign its values directly @@ -109,20 +109,6 @@ export default class Color { Object.assign(this, components) } - opacity (opacity = 1) { - this.opacity = opacity - } - - /* - - */ - - brightness () { - const { _a: r, _b: g, _c: b } = this.rgb() - const value = (r / 255 * 0.30) + (g / 255 * 0.59) + (b / 255 * 0.11) - return value - } - /* Conversion Methods */ @@ -332,14 +318,14 @@ export default class Color { Input and Output methods */ - hex () { + toHex () { let { _a, _b, _c } = this.rgb() let [ r, g, b ] = [ _a, _b, _c ].map(componentHex) return `#${r}${g}${b}` } toString () { - return this.hex() + return this.toHex() } toRgb () { diff --git a/src/types/Morphable.js b/src/types/Morphable.js deleted file mode 100644 index e7af8c1..0000000 --- a/src/types/Morphable.js +++ /dev/null @@ -1,253 +0,0 @@ -import { Ease } from '../animation/Controller.js' -import { - delimiter, - numberAndUnit, - pathLetters -} from '../modules/core/regex.js' -import { extend } from '../utils/adopter.js' -import Color from './Color.js' -import PathArray from './PathArray.js' -import SVGArray from './SVGArray.js' -import SVGNumber from './SVGNumber.js' - -export default class Morphable { - constructor (stepper) { - this._stepper = stepper || new Ease('-') - - this._from = null - this._to = null - this._type = null - this._context = null - this._morphObj = null - } - - from (val) { - if (val == null) { - return this._from - } - - this._from = this._set(val) - return this - } - - to (val) { - if (val == null) { - return this._to - } - - this._to = this._set(val) - return this - } - - type (type) { - // getter - if (type == null) { - return this._type - } - - // setter - this._type = type - return this - } - - _set (value) { - if (!this._type) { - var type = typeof value - - if (type === 'number') { - this.type(SVGNumber) - } else if (type === 'string') { - if (Color.isColor(value)) { - this.type(Color) - } else if (delimiter.test(value)) { - this.type(pathLetters.test(value) - ? PathArray - : SVGArray - ) - } else if (numberAndUnit.test(value)) { - this.type(SVGNumber) - } else { - this.type(NonMorphable) - } - } else if (morphableTypes.indexOf(value.constructor) > -1) { - this.type(value.constructor) - } else if (Array.isArray(value)) { - this.type(SVGArray) - } else if (type === 'object') { - this.type(ObjectBag) - } else { - this.type(NonMorphable) - } - } - - var result = (new this._type(value)) - if (this._type === Color) { - result = this._to ? result[this._to[4]]() - : this._from ? result[this._from[4]]() - : result - } - result = result.toArray() - - this._morphObj = this._morphObj || new this._type() - this._context = this._context - || Array.apply(null, Array(result.length)).map(Object) - return result - } - - stepper (stepper) { - if (stepper == null) return this._stepper - this._stepper = stepper - return this - } - - done () { - var complete = this._context - .map(this._stepper.done) - .reduce(function (last, curr) { - return last && curr - }, true) - return complete - } - - at (pos) { - var _this = this - - return this._morphObj.fromArray( - this._from.map(function (i, index) { - return _this._stepper.step(i, _this._to[index], pos, _this._context[index], _this._context) - }) - ) - } -} - -export class NonMorphable { - constructor (...args) { - this.init(...args) - } - - init (val) { - val = Array.isArray(val) ? val[0] : val - this.value = val - return this - } - - valueOf () { - return this.value - } - - toArray () { - return [ this.value ] - } -} - -export class TransformBag { - constructor (...args) { - this.init(...args) - } - - init (obj) { - if (Array.isArray(obj)) { - obj = { - scaleX: obj[0], - scaleY: obj[1], - shear: obj[2], - rotate: obj[3], - translateX: obj[4], - translateY: obj[5], - originX: obj[6], - originY: obj[7] - } - } - - Object.assign(this, TransformBag.defaults, obj) - return this - } - - toArray () { - var v = this - - return [ - v.scaleX, - v.scaleY, - v.shear, - v.rotate, - v.translateX, - v.translateY, - v.originX, - v.originY - ] - } -} - -TransformBag.defaults = { - scaleX: 1, - scaleY: 1, - shear: 0, - rotate: 0, - translateX: 0, - translateY: 0, - originX: 0, - originY: 0 -} - -export class ObjectBag { - constructor (...args) { - this.init(...args) - } - - init (objOrArr) { - this.values = [] - - if (Array.isArray(objOrArr)) { - this.values = objOrArr - return - } - - var entries = Object.entries(objOrArr || {}).sort((a, b) => { - return a[0] - b[0] - }) - - this.values = entries.reduce((last, curr) => last.concat(curr), []) - return this - } - - valueOf () { - var obj = {} - var arr = this.values - - for (var i = 0, len = arr.length; i < len; i += 2) { - obj[arr[i]] = arr[i + 1] - } - - return obj - } - - toArray () { - return this.values - } -} - -const morphableTypes = [ - NonMorphable, - TransformBag, - ObjectBag -] - -export function registerMorphableType (type = []) { - morphableTypes.push(...[].concat(type)) -} - -export function makeMorphable () { - extend(morphableTypes, { - to (val) { - return new Morphable() - .type(this.constructor) - .from(this.valueOf()) - .to(val) - }, - fromArray (arr) { - this.init(arr) - return this - } - }) -} |