GT2/GT2-iOS/node_modules/art/modes/svg/path.js

76 lines
1.4 KiB
JavaScript

var Class = require('../../core/class');
// Utility command factories
var point = function(c){
return function(x, y){
return this.push(c, x, y);
};
};
var arc = function(c, cc){
return function(x, y, rx, ry, outer){
return this.push(c, Math.abs(rx || x), Math.abs(ry || rx || y), 0, outer ? 1 : 0, cc, x, y);
};
};
var curve = function(t, s, q, c){
return function(c1x, c1y, c2x, c2y, ex, ey){
var l = arguments.length, k = l < 4 ? t : l < 6 ? q : c;
return this.push(k, c1x, c1y, c2x, c2y, ex, ey);
};
};
// SVG Path Class
var SVGPath = Class({
initialize: function(path){
if (path instanceof SVGPath){
this.path = [Array.prototype.join.call(path.path, ' ')];
} else {
if (path && path.applyToPath)
path.applyToPath(this);
else
this.path = [path || 'm0 0'];
}
},
push: function(){
this.path.push(Array.prototype.join.call(arguments, ' '));
return this;
},
reset: function(){
this.path = [];
return this;
},
move: point('m'),
moveTo: point('M'),
line: point('l'),
lineTo: point('L'),
curve: curve('t', 's', 'q', 'c'),
curveTo: curve('T', 'S', 'Q', 'C'),
arc: arc('a', 1),
arcTo: arc('A', 1),
counterArc: arc('a', 0),
counterArcTo: arc('A', 0),
close: function(){
return this.push('z');
},
toSVG: function(){
return this.path.join(' ');
}
});
SVGPath.prototype.toString = SVGPath.prototype.toSVG;
module.exports = SVGPath;