mirror of
https://github.com/Doodle3D/Doodle3D-Slicer.git
synced 2024-11-22 21:47:59 +01:00
2748 lines
88 KiB
JavaScript
2748 lines
88 KiB
JavaScript
//canvas cheat sheet
|
|
//http://cheatsheetworld.com/programming/html5-canvas-cheat-sheet/
|
|
|
|
//TODO
|
|
//Global Composite Operation
|
|
//Linear Gradient
|
|
//Radial Gradient
|
|
|
|
"use strict";
|
|
|
|
var CAL = {
|
|
name: "Canvas Abstraction Layer",
|
|
version: "1.0",
|
|
author: "Casper Lamboo",
|
|
contact: "casperlamboo@gmail.com"
|
|
};
|
|
|
|
CAL.Math = {
|
|
clamb: function clamb(value, min, max) {
|
|
"use strict";
|
|
|
|
return value > min ? value < max ? value : max : min;
|
|
},
|
|
randomInt: function randomInt(min, max) {
|
|
"use strict";
|
|
|
|
return Math.floor(CAL.Math.random(min, max + 1));
|
|
},
|
|
random: function random(min, max) {
|
|
"use strict";
|
|
|
|
min = min === undefined ? 0 : min;
|
|
max = max === undefined ? 1 : max;
|
|
|
|
return Math.random() * (max - min) + min;
|
|
},
|
|
sign: function sign(value) {
|
|
"use strict";
|
|
|
|
return value > 0 ? 1 : value < 0 ? -1 : 0;
|
|
},
|
|
lineCollision: function lineCollision(v1, v2, v3, v4) {
|
|
"use strict";
|
|
|
|
//bron: http://mathworld.wolfram.com/Line-LineIntersection.html
|
|
var intersection = new CAL.Vector(((v1.x * v2.y - v1.y * v2.x) * (v3.x - v4.x) - (v1.x - v2.x) * (v3.x * v4.y - v3.y * v4.x)) / ((v1.x - v2.x) * (v3.y - v4.y) - (v1.y - v2.y) * (v3.x - v4.x)), ((v1.x * v2.y - v1.y * v2.x) * (v3.y - v4.y) - (v1.y - v2.y) * (v3.x * v4.y - v3.y * v4.x)) / ((v1.x - v2.x) * (v3.y - v4.y) - (v1.y - v2.y) * (v3.x - v4.x)));
|
|
|
|
var line1 = v1.subtract(v2).length();
|
|
var line2 = v3.subtract(v4).length();
|
|
|
|
var a = line1 >= v1.subtract(intersection).length();
|
|
var b = line1 >= v2.subtract(intersection).length();
|
|
var c = line2 >= v3.subtract(intersection).length();
|
|
var d = line2 >= v4.subtract(intersection).length();
|
|
|
|
return a && b && c && d ? intersection : false;
|
|
}
|
|
};
|
|
|
|
CAL.Easings = {
|
|
bounceEaseOut: function bounceEaseOut(dt, b, c, d) {
|
|
"use strict";
|
|
|
|
if ((dt /= d) < 1 / 2.75) {
|
|
return c * (7.5625 * dt * dt) + b;
|
|
} else if (dt < 2 / 2.75) {
|
|
return c * (7.5625 * (dt -= 1.5 / 2.75) * dt + 0.75) + b;
|
|
} else if (dt < 2.5 / 2.75) {
|
|
return c * (7.5625 * (dt -= 2.25 / 2.75) * dt + 0.9375) + b;
|
|
} else {
|
|
return c * (7.5625 * (dt -= 2.625 / 2.75) * dt + 0.984375) + b;
|
|
}
|
|
},
|
|
easeIn: function easeIn(dt, b, c, d) {
|
|
"use strict";
|
|
|
|
return c * (dt /= d) * dt + b;
|
|
},
|
|
easeOut: function easeOut(dt, b, c, d) {
|
|
"use strict";
|
|
|
|
return -c * (dt /= d) * (dt - 2) + b;
|
|
},
|
|
easeInOut: function easeInOut(dt, b, c, d) {
|
|
"use strict";
|
|
|
|
if ((dt /= d / 2) < 1) {
|
|
return c / 2 * dt * dt + b;
|
|
}
|
|
return -c / 2 * (--dt * (dt - 2) - 1) + b;
|
|
},
|
|
strongEaseIn: function strongEaseIn(dt, b, c, d) {
|
|
"use strict";
|
|
|
|
return c * (dt /= d) * dt * dt * dt * dt + b;
|
|
},
|
|
strongEaseOut: function strongEaseOut(dt, b, c, d) {
|
|
"use strict";
|
|
|
|
return c * ((dt = dt / d - 1) * dt * dt * dt * dt + 1) + b;
|
|
},
|
|
strongEaseInOut: function strongEaseInOut(dt, b, c, d) {
|
|
"use strict";
|
|
|
|
if ((dt /= d / 2) < 1) {
|
|
return c / 2 * dt * dt * dt * dt * dt + b;
|
|
}
|
|
return c / 2 * ((dt -= 2) * dt * dt * dt * dt + 2) + b;
|
|
},
|
|
linear: function linear(dt, b, c, d) {
|
|
"use strict";
|
|
|
|
return c * dt / d + b;
|
|
}
|
|
};
|
|
|
|
/*Object.prototype.clone = function () {
|
|
'use strict';
|
|
|
|
var object = {};
|
|
for (var i in this) {
|
|
if (this[i] && this.hasOwnProperty(i)) {
|
|
var element = this[i];
|
|
|
|
if (element.hasOwnProperty('clone')) {
|
|
console.log(element);
|
|
}
|
|
|
|
object[i] = element.hasOwnProperty('clone') ? element.clone() : element;
|
|
}
|
|
}
|
|
return object;
|
|
};
|
|
|
|
String.prototype.clone = Boolean.prototype.clone = Number.prototype.clone = Function.prototype.clone = null;
|
|
|
|
//doesn't clone it actualy
|
|
Uint16Array.prototype.clone = function () {
|
|
'use strict';
|
|
|
|
var array = new Uint16Array(this.length);
|
|
for (var i = 0; i < this.length; i ++) {
|
|
array[i] = this[i];
|
|
}
|
|
|
|
return array;
|
|
};
|
|
Uint32Array.prototype.clone = function () {
|
|
'use strict';
|
|
|
|
var array = new Uint32Array(this.length);
|
|
for (var i = 0; i < this.length; i ++) {
|
|
array[i] = this[i];
|
|
}
|
|
|
|
return array;
|
|
};
|
|
Uint8Array.prototype.clone = function () {
|
|
'use strict';
|
|
|
|
var array = new Uint8Array(this.length);
|
|
for (var i = 0; i < this.length; i ++) {
|
|
array[i] = this[i];
|
|
}
|
|
|
|
return array;
|
|
};
|
|
Uint8ClampedArray.prototype.clone = function () {
|
|
'use strict';
|
|
|
|
var array = new Uint8ClampedArray(this.length);
|
|
for (var i = 0; i < this.length; i ++) {
|
|
array[i] = this[i];
|
|
}
|
|
|
|
return array;
|
|
};
|
|
Int16Array.prototype.clone = function () {
|
|
'use strict';
|
|
|
|
var array = new Int16Array(this.length);
|
|
for (var i = 0; i < this.length; i ++) {
|
|
array[i] = this[i];
|
|
}
|
|
|
|
return array;
|
|
};
|
|
Int32Array.prototype.clone = function () {
|
|
'use strict';
|
|
|
|
var array = new Int32Array(this.length);
|
|
for (var i = 0; i < this.length; i ++) {
|
|
array[i] = this[i];
|
|
}
|
|
|
|
return array;
|
|
};
|
|
Int8Array.prototype.clone = function () {
|
|
'use strict';
|
|
|
|
var array = new Int8Array(this.length);
|
|
for (var i = 0; i < this.length; i ++) {
|
|
array[i] = this[i];
|
|
}
|
|
|
|
return array;
|
|
};
|
|
Float32Array.prototype.clone = function () {
|
|
'use strict';
|
|
|
|
var array = new Float32Array(this.length);
|
|
for (var i = 0; i < this.length; i ++) {
|
|
array[i] = this[i];
|
|
}
|
|
|
|
return array;
|
|
};
|
|
Float64Array.prototype.clone = function () {
|
|
'use strict';
|
|
|
|
var array = new Float64Array(this.length);
|
|
for (var i = 0; i < this.length; i ++) {
|
|
array[i] = this[i];
|
|
}
|
|
|
|
return array;
|
|
};*/
|
|
|
|
Array.prototype.max = function () {
|
|
"use strict";
|
|
|
|
var max = -Infinity;
|
|
for (var i = 0; i < this.length; i++) {
|
|
var element = this[i];
|
|
|
|
if (element > max) {
|
|
max = element;
|
|
}
|
|
};
|
|
return max;
|
|
};
|
|
Array.prototype.min = function () {
|
|
"use strict";
|
|
|
|
var min = Infinity;
|
|
for (var i = 0; i < this.length; i++) {
|
|
var element = this[i];
|
|
|
|
if (element < min) {
|
|
min = element;
|
|
}
|
|
};
|
|
return min;
|
|
};
|
|
Array.prototype.clone = function () {
|
|
"use strict";
|
|
|
|
var array = [];
|
|
for (var i = 0; i < this.length; i++) {
|
|
var element = this[i];
|
|
|
|
array.push(element.clone !== undefined ? element.clone() : element);
|
|
};
|
|
return array;
|
|
};
|
|
Array.prototype.remove = function (element) {
|
|
"use strict";
|
|
|
|
var index = this.indexOf(element);
|
|
if (index !== -1) {
|
|
this.splice(index, 1);
|
|
}
|
|
|
|
return index;
|
|
};
|
|
|
|
var requestAnimFrame = (function () {
|
|
"use strict";
|
|
|
|
return requestAnimationFrame || webkitRequestAnimationFrame || mozRequestAnimationFrame || function (callback) {
|
|
setTimeout(callback, 1000 / 60);
|
|
};
|
|
})();
|
|
"use strict";
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
CAL.Vector = (function () {
|
|
var _class = function _class(x, y) {
|
|
_classCallCheck(this, _class);
|
|
|
|
this.x = x || 0;
|
|
this.y = y || 0;
|
|
};
|
|
|
|
_createClass(_class, [{
|
|
key: "identity",
|
|
value: function identity(x, y) {
|
|
this.x = 0;
|
|
this.y = 0;
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "set",
|
|
value: function set(x, y) {
|
|
this.x = x;
|
|
this.y = y;
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "copy",
|
|
value: function copy(vector) {
|
|
this.x = vector.x;
|
|
this.y = vector.y;
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "add",
|
|
value: function add(vector) {
|
|
var x = this.x + vector.x;
|
|
var y = this.y + vector.y;
|
|
|
|
return new CAL.Vector(x, y);
|
|
}
|
|
}, {
|
|
key: "subtract",
|
|
value: function subtract(vector) {
|
|
var x = this.x - vector.x;
|
|
var y = this.y - vector.y;
|
|
|
|
return new CAL.Vector(x, y);
|
|
}
|
|
}, {
|
|
key: "scale",
|
|
value: function scale(scalar) {
|
|
var x = this.x * scalar;
|
|
var y = this.y * scalar;
|
|
|
|
return new CAL.Vector(x, y);
|
|
}
|
|
}, {
|
|
key: "rotate",
|
|
value: function rotate(angle) {
|
|
var cos = Math.cos(angle);
|
|
var sin = Math.sin(angle);
|
|
|
|
var x = cos * this.x - sin * this.y;
|
|
var y = sin * this.x + cos * this.y;
|
|
|
|
return new CAL.Vector(x, y);
|
|
}
|
|
}, {
|
|
key: "multiply",
|
|
value: function multiply(vector) {
|
|
var x = this.x * vector.x;
|
|
var y = this.y * vector.y;
|
|
|
|
return new CAL.Vector(x, y);
|
|
}
|
|
}, {
|
|
key: "setLength",
|
|
value: function setLength(length) {
|
|
return new CAL.Vector(this.x, this.y).normalize().scale(length);
|
|
}
|
|
}, {
|
|
key: "length",
|
|
value: function length() {
|
|
return Math.sqrt(this.x * this.x + this.y * this.y);
|
|
}
|
|
}, {
|
|
key: "normal",
|
|
value: function normal() {
|
|
return new CAL.Vector(this.y, -this.x);
|
|
}
|
|
}, {
|
|
key: "normalize",
|
|
value: function normalize() {
|
|
var length = this.length();
|
|
|
|
var x = this.x / length;
|
|
var y = this.y / length;
|
|
|
|
return new CAL.Vector(x, y);
|
|
}
|
|
}, {
|
|
key: "angle",
|
|
value: function angle() {
|
|
return Math.atan2(this.y, this.x);
|
|
}
|
|
}, {
|
|
key: "dot",
|
|
value: function dot(vector) {
|
|
return this.x * vector.x + this.y * vector.y;
|
|
}
|
|
}, {
|
|
key: "cross",
|
|
value: function cross(vector) {
|
|
return this.x * vector.y - this.y * vector.x;
|
|
}
|
|
}, {
|
|
key: "round",
|
|
value: function round() {
|
|
var x = Math.round(this.x);
|
|
var y = Math.round(this.y);
|
|
|
|
return new CAL.Vector(x, y);
|
|
}
|
|
}, {
|
|
key: "applyMatrix",
|
|
value: function applyMatrix(matrix) {
|
|
var m = matrix.matrix;
|
|
|
|
var x = m[0] * this.x + m[1] * this.y + m[2];
|
|
var y = m[3] * this.x + m[4] * this.y + m[5];
|
|
|
|
return new CAL.Vector(x, y);
|
|
}
|
|
}, {
|
|
key: "distanceTo",
|
|
value: function distanceTo(vector) {
|
|
return this.subtract(vector).length();
|
|
}
|
|
}, {
|
|
key: "clone",
|
|
value: function clone() {
|
|
return new CAL.Vector(this.x, this.y);
|
|
}
|
|
}, {
|
|
key: "equals",
|
|
value: function equals(vector) {
|
|
return this.x === vector.x && this.y === vector.y;
|
|
}
|
|
}, {
|
|
key: "draw",
|
|
value: function draw(context, x, y) {
|
|
var end = new CAL.Vector(this.x + x, this.y + y);
|
|
var arrowOrigin = new CAL.Vector(x, y).add(this.subtract(this.normalize().scale(10)));
|
|
var left = this.normal().normalize().scale(10).add(arrowOrigin);
|
|
var right = this.normal().normalize().scale(-10).add(arrowOrigin);
|
|
|
|
context.beginPath();
|
|
context.moveTo(x, y);
|
|
context.lineTo(end.x, end.y);
|
|
context.moveTo(left.x, left.y);
|
|
context.lineTo(end.x, end.y);
|
|
context.lineTo(right.x, right.y);
|
|
|
|
context.stroke();
|
|
}
|
|
}]);
|
|
|
|
return _class;
|
|
})();
|
|
"use strict";
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
CAL.Matrix = (function () {
|
|
var _class = function _class(options) {
|
|
_classCallCheck(this, _class);
|
|
|
|
if (options === undefined) {
|
|
this.identity();
|
|
} else if (options instanceof Array) {
|
|
this.matrix = options;
|
|
} else {
|
|
if (options.matrix !== undefined) {
|
|
this.matrix = options.matrix;
|
|
}
|
|
if (options.x !== undefined) {
|
|
this._x = options.x;
|
|
}
|
|
if (options.y !== undefined) {
|
|
this._y = options.y;
|
|
}
|
|
if (options.sx !== undefined) {
|
|
this._sx = options.sx;
|
|
}
|
|
if (options.sy !== undefined) {
|
|
this._sy = options.sy;
|
|
}
|
|
if (options.rotation !== undefined) {
|
|
this._rotation = options.rotation;
|
|
}
|
|
|
|
if (this._matrix === undefined) {
|
|
this._x = this._x || 0;
|
|
this._y = this._y || 0;
|
|
this._sx = this._sx !== undefined ? this._sx : 1;
|
|
this._sy = this._sy !== undefined ? this._sy : 1;
|
|
this._rotation = this._rotation || 0;
|
|
}
|
|
}
|
|
};
|
|
|
|
_createClass(_class, [{
|
|
key: "identity",
|
|
value: function identity() {
|
|
this._matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];
|
|
|
|
this._x = 0;
|
|
this._y = 0;
|
|
this._sx = 1;
|
|
this._sy = 1;
|
|
this._rotation = 0;
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "_updateMatrix",
|
|
value: function _updateMatrix() {
|
|
var sin = Math.sin(this._rotation);
|
|
var cos = Math.cos(this._rotation);
|
|
|
|
this._matrix = [this._sx * cos, this._sy * -sin, this._x, this._sx * sin, this._sy * cos, this._y, 0, 0, 1];
|
|
|
|
this._x = this._matrix[2];
|
|
this._y = this._matrix[5];
|
|
}
|
|
}, {
|
|
key: "multiplyMatrix",
|
|
value: function multiplyMatrix(m) {
|
|
var a = this.matrix;
|
|
var b = m.matrix;
|
|
var translation = new CAL.Vector(b[2], b[5]).applyMatrix(this);
|
|
|
|
return new CAL.Matrix([a[0] * b[0] + a[3] * b[1] + a[6] * b[2], a[1] * b[0] + a[4] * b[1] + a[7] * b[2], a[2] * b[0] + a[5] * b[1] + a[8] * b[2], a[0] * b[3] + a[3] * b[4] + a[6] * b[5], a[1] * b[3] + a[4] * b[4] + a[7] * b[5], a[2] * b[3] + a[5] * b[4] + a[8] * b[5], a[0] * b[6] + a[3] * b[7] + a[6] * b[8], a[1] * b[6] + a[4] * b[7] + a[7] * b[8], a[2] * b[6] + a[5] * b[7] + a[8] * b[8]]);
|
|
}
|
|
}, {
|
|
key: "inverseMatrix",
|
|
value: function inverseMatrix() {
|
|
var m = this.matrix;
|
|
|
|
var det = 1 / (m[0] * m[4] * m[8] + m[1] * m[5] * m[6] + m[2] * m[3] * m[7] - m[1] * m[3] * m[8] - m[0] * m[5] * m[7] - m[2] * m[4] * m[6]);
|
|
|
|
return new CAL.Matrix([det * (m[4] * m[8] - m[5] * m[7]), -det * (m[1] * m[8] - m[2] * m[7]), det * (m[1] * m[5] - m[2] * m[4]), -det * (m[3] * m[8] - m[5] * m[6]), det * (m[0] * m[8] - m[2] * m[6]), -det * (m[0] * m[5] - m[2] * m[3]), det * (m[3] * m[7] - m[4] * m[6]), -det * (m[0] * m[7] - m[1] * m[6]), det * (m[0] * m[4] - m[1] * m[3])]);
|
|
|
|
/*var m = this._matrix;
|
|
var det = 1 / (m[0]*m[4]*m[8] + m[1]*m[5]*m[6] + m[2]*m[3]*m[7] - m[2]*m[4]*m[6] - m[0]*m[5]*m[7] - m[1]*m[3]*m[8]);
|
|
return new CAL.Matrix([
|
|
det * (m[4]*m[8] - m[5]*m[7]),
|
|
det * (m[3]*m[8] - m[5]*m[6]),
|
|
det * (m[3]*m[7] - m[4]*m[6]),
|
|
det * (m[1]*m[8] - m[2]*m[7]),
|
|
det * (m[0]*m[8] - m[2]*m[6]),
|
|
det * (m[0]*m[7] - m[1]*m[6]),
|
|
det * (m[1]*m[5] - m[2]*m[4]),
|
|
det * (m[0]*m[5] - m[2]*m[3]),
|
|
det * (m[0]*m[4] - m[1]*m[3])
|
|
]);*/
|
|
}
|
|
}, {
|
|
key: "translate",
|
|
value: function translate(x, y) {
|
|
this.x += x;
|
|
this.y += y;
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "setMatrix",
|
|
value: function setMatrix(matrix) {
|
|
this._matrix = matrix.matrix;
|
|
this._x = matrix.x;
|
|
this._y = matrix.y;
|
|
this._sx = matrix.sx;
|
|
this._sy = matrix.sy;
|
|
this._rotation = matrix.rotation;
|
|
|
|
if (this.onchangetransfrom !== undefined) {
|
|
this.onchangetransfrom();
|
|
}
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "setMatrixContext",
|
|
value: function setMatrixContext(context) {
|
|
var m = this.matrix;
|
|
context.transform(m[0], m[3], m[1], m[4], m[2], m[5]);
|
|
}
|
|
}, {
|
|
key: "rotateAroundAbsolute",
|
|
value: function rotateAroundAbsolute(angle, center) {
|
|
this.rotateAroundRelative(angle, center.applyMatrix(this.inverseMatrix()));
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "rotateAroundRelative",
|
|
value: function rotateAroundRelative(angle, center) {
|
|
if (angle !== 0) {
|
|
var before = center.applyMatrix(this);
|
|
|
|
this.rotation = angle;
|
|
|
|
var after = center.applyMatrix(this);
|
|
|
|
var offset = before.subtract(after);
|
|
|
|
this.x += offset.x;
|
|
this.y += offset.y;
|
|
}
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "scaleAroundAbsolute",
|
|
value: function scaleAroundAbsolute(sx, sy, center) {
|
|
this.scaleAroundRelative(sx, sy, center.applyMatrix(this.inverseMatrix()));
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "scaleAroundRelative",
|
|
value: function scaleAroundRelative(sx, sy, center) {
|
|
var before = center.applyMatrix(this);
|
|
|
|
this.sx = sx;
|
|
this.sy = sy;
|
|
|
|
var after = center.applyMatrix(this);
|
|
|
|
var offset = before.subtract(after);
|
|
|
|
this.x += offset.x;
|
|
this.y += offset.y;
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "clone",
|
|
value: function clone() {
|
|
var m = {};
|
|
|
|
if (this._matrix !== undefined) {
|
|
m.matrix = this._matrix;
|
|
}
|
|
if (this._x !== undefined) {
|
|
m.x = this._x;
|
|
}
|
|
if (this._y !== undefined) {
|
|
m.y = this._y;
|
|
}
|
|
if (this._rotation !== undefined) {
|
|
m.rotation = this._rotation;
|
|
}
|
|
if (this._sx !== undefined) {
|
|
m.sx = this._sx;
|
|
}
|
|
if (this._sy !== undefined) {
|
|
m.sy = this._sy;
|
|
}
|
|
|
|
return new CAL.Matrix(m);
|
|
}
|
|
}, {
|
|
key: "sx",
|
|
get: function get() {
|
|
if (this._sx === undefined) {
|
|
this._sx = /*CAL.Math.sign(this._matrix[0]) * */Math.sqrt(Math.pow(this._matrix[0], 2) + Math.pow(this._matrix[1], 2));
|
|
}
|
|
|
|
return this._sx;
|
|
},
|
|
set: function set(sx) {
|
|
this._sx = sx;
|
|
|
|
delete this._matrix;
|
|
|
|
if (this.onchangetransfrom !== undefined) {
|
|
this.onchangetransfrom();
|
|
}
|
|
}
|
|
}, {
|
|
key: "sy",
|
|
get: function get() {
|
|
if (this._sy === undefined) {
|
|
this._sy = /*CAL.Math.sign(this._matrix[4]) * */Math.sqrt(Math.pow(this._matrix[3], 2) + Math.pow(this._matrix[4], 2));
|
|
}
|
|
|
|
return this._sy;
|
|
},
|
|
set: function set(sy) {
|
|
this._sy = sy;
|
|
|
|
delete this._matrix;
|
|
|
|
if (this.onchangetransfrom !== undefined) {
|
|
this.onchangetransfrom();
|
|
}
|
|
}
|
|
}, {
|
|
key: "rotation",
|
|
get: function get() {
|
|
if (this._rotation === undefined) {
|
|
var p = new CAL.Vector(1, 0).applyMatrix(this).subtract(new CAL.Vector(this.x, this.y));
|
|
this._rotation = Math.atan2(p.y, p.x);
|
|
|
|
//this._rotation = Math.atan(-this._matrix[1], this._matrix[0]);
|
|
}
|
|
|
|
return this._rotation;
|
|
},
|
|
set: function set(rotation) {
|
|
this._rotation = rotation;
|
|
|
|
delete this._matrix;
|
|
|
|
if (this.onchangetransfrom !== undefined) {
|
|
this.onchangetransfrom();
|
|
}
|
|
}
|
|
}, {
|
|
key: "x",
|
|
get: function get() {
|
|
if (this._x === undefined) {
|
|
this._x = this._matrix[2];
|
|
}
|
|
|
|
return this._x;
|
|
},
|
|
set: function set(x) {
|
|
this._x = x;
|
|
|
|
if (this._matrix !== undefined) {
|
|
this._matrix[2] = x;
|
|
}
|
|
|
|
if (this.onchangetransfrom !== undefined) {
|
|
this.onchangetransfrom();
|
|
}
|
|
}
|
|
}, {
|
|
key: "y",
|
|
get: function get() {
|
|
if (this._y === undefined) {
|
|
this._y = this._matrix[5];
|
|
}
|
|
|
|
return this._y;
|
|
},
|
|
set: function set(y) {
|
|
this._y = y;
|
|
|
|
if (this._matrix !== undefined) {
|
|
this._matrix[5] = y;
|
|
}
|
|
}
|
|
}, {
|
|
key: "matrix",
|
|
get: function get() {
|
|
if (this._matrix === undefined) {
|
|
this._updateMatrix();
|
|
}
|
|
|
|
return this._matrix;
|
|
},
|
|
set: function set(m) {
|
|
if (m instanceof Array) {
|
|
this._matrix = m;
|
|
|
|
delete this._sx;
|
|
delete this._sy;
|
|
delete this._rotation;
|
|
} else {
|
|
this.set(m);
|
|
}
|
|
|
|
if (this.onchangetransfrom !== undefined) {
|
|
this.onchangetransfrom();
|
|
}
|
|
}
|
|
}]);
|
|
|
|
return _class;
|
|
})();
|
|
"use strict";
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
CAL.Color = (function () {
|
|
var _class = function _class() {
|
|
_classCallCheck(this, _class);
|
|
|
|
if (typeof arguments[0] === "number" && typeof arguments[1] === "number" && typeof arguments[2] === "number") {
|
|
this.r = arguments[0];
|
|
this.g = arguments[1];
|
|
this.b = arguments[2];
|
|
this.a = typeof arguments[3] === "number" ? arguments[3] : 1;
|
|
} else if (typeof arguments[0] === "number") {
|
|
var hex = Math.floor(arguments[0]);
|
|
|
|
this.r = hex >> 16 & 255;
|
|
this.g = hex >> 8 & 255;
|
|
this.b = hex & 255;
|
|
this.a = typeof arguments[1] === "number" ? arguments[1] : 1;
|
|
} else {
|
|
this.r = 0;
|
|
this.g = 0;
|
|
this.b = 0;
|
|
this.a = 1;
|
|
}
|
|
};
|
|
|
|
_createClass(_class, [{
|
|
key: "setStroke",
|
|
value: function setStroke(context) {
|
|
context.strokeStyle = "rgba(" + this.r + ", " + this.g + ", " + this.b + ", " + this.a + ")";
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "setFill",
|
|
value: function setFill(context) {
|
|
context.fillStyle = "rgba(" + this.r + ", " + this.g + ", " + this.b + ", " + this.a + ")";
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "setColor",
|
|
value: function setColor(context) {
|
|
this.setStroke(context);
|
|
this.setFill(context);
|
|
|
|
return this;
|
|
}
|
|
}]);
|
|
|
|
return _class;
|
|
})();
|
|
"use strict";
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
|
|
|
|
CAL.Draw = (function (_CAL$Matrix) {
|
|
var _class = function _class(centerX, centerY, numberWidth, numberHeight, options) {
|
|
_classCallCheck(this, _class);
|
|
|
|
_get(Object.getPrototypeOf(_class.prototype), "constructor", this).call(this, options);
|
|
|
|
this.visible = options.visible !== undefined ? options.visible : true;
|
|
this.active = false;
|
|
this.depth = options.depth || 0;
|
|
|
|
this.alpha = typeof options.alpha === "number" ? options.alpha : 1;
|
|
|
|
this.centerX = centerX || 0;
|
|
this.centerY = centerY || 0;
|
|
this.index = 0;
|
|
|
|
this.numberWidth = numberWidth || 1;
|
|
this.numberHeight = numberHeight || 1;
|
|
this.length = this.numberWidth * this.numberHeight;
|
|
};
|
|
|
|
_inherits(_class, _CAL$Matrix);
|
|
|
|
_createClass(_class, [{
|
|
key: "getBoundingBox",
|
|
value: function getBoundingBox() {
|
|
return {
|
|
top: -this.centerX,
|
|
left: -this.centerY,
|
|
right: this.width - this.centerX,
|
|
bottom: this.height - this.centerY,
|
|
width: this.width,
|
|
height: this.height
|
|
};
|
|
}
|
|
}, {
|
|
key: "draw",
|
|
value: function draw(context, matrix) {
|
|
console.log("Test");
|
|
context.save();
|
|
(matrix || this).setMatrixContext(context);
|
|
context.globalAlpha = this.alpha;
|
|
this.drawSimple(context, this.index, 0, 0);
|
|
context.restore();
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "drawSimple",
|
|
value: function drawSimple(context, index, x, y) {
|
|
var sx = index % this.numberWidth * this.width;
|
|
var sy = Math.floor(index / this.numberWidth) * this.height;
|
|
|
|
var offsetX = x - this.centerX;
|
|
var offsetY = y - this.centerY;
|
|
|
|
context.drawImage(this.image, sx, sy, this.width, this.height, offsetX, offsetY, this.width, this.height);
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "drawAlpha",
|
|
value: function drawAlpha(context, index, x, y, alpha) {
|
|
context.globalAlpha = alpha;
|
|
this.drawSimple(context, index, x, y);
|
|
context.globalAlpha = 1;
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "drawAngle",
|
|
value: function drawAngle(context, index, x, y, angle) {
|
|
context.save();
|
|
context.translate(x, y);
|
|
context.rotate(angle);
|
|
this.drawSimple(context, index, 0, 0);
|
|
context.restore();
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "drawScale",
|
|
value: function drawScale(context, index, x, y, width, height) {
|
|
var sx = index % this.length * this.width;
|
|
var sy = Math.floor(index / this.length) * this.height;
|
|
|
|
var offsetX = x - this.centerX;
|
|
var offsetY = y - this.centerY;
|
|
|
|
context.drawImage(this.image, sx, sy, this.width, this.height, offsetX, offsetY, width, height);
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "drawContain",
|
|
value: function drawContain(context, index, x, y, width, height) {
|
|
if (width / height > this.width / this.height) {
|
|
x = x + (width - height / this.height * this.width) / 2;
|
|
width = height / this.height * this.width;
|
|
} else {
|
|
y = y + (height - width / this.width * this.height) / 2;
|
|
height = width / this.width * this.height;
|
|
}
|
|
|
|
this.drawScale(context, index, x, y, width, height);
|
|
|
|
return this;
|
|
}
|
|
}]);
|
|
|
|
return _class;
|
|
})(CAL.Matrix);
|
|
"use strict";
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
|
|
|
|
CAL.Surface = (function (_CAL$Draw) {
|
|
var _class = function _class(options) {
|
|
_classCallCheck(this, _class);
|
|
|
|
options = options || {};
|
|
_get(Object.getPrototypeOf(_class.prototype), "constructor", this).call(this, options.centerX, options.centerY, options.numberWidth, options.numberHeight, options);
|
|
|
|
this.clearColor = options.clearColor || false;
|
|
|
|
this.setCanvas(options.canvas || document.createElement("canvas"));
|
|
|
|
this.setSize(options.width, options.height, options.pixelRatio);
|
|
};
|
|
|
|
_inherits(_class, _CAL$Draw);
|
|
|
|
_createClass(_class, [{
|
|
key: "setSize",
|
|
value: function setSize(width, height, pixelRatio) {
|
|
var width = width || this.image.width;
|
|
var height = height || this.image.height;
|
|
var pixelRatio = pixelRatio ? pixelRatio : 1;
|
|
|
|
this.image.width = width * pixelRatio;
|
|
this.image.height = height * pixelRatio;
|
|
|
|
this.image.style.width = width + "px";
|
|
this.image.style.height = height + "px";
|
|
|
|
this.width = this.image.width / this.numberWidth;
|
|
this.height = this.image.height / this.numberHeight;
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "setCanvas",
|
|
value: function setCanvas(canvas) {
|
|
this.image = canvas;
|
|
this.context = canvas.getContext("2d");
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "clear",
|
|
value: function clear() {
|
|
if (this.clearColor) {
|
|
this.clearColor.setColor(this.context);
|
|
this.context.fillRect(0, 0, this.image.width, this.image.height);
|
|
} else {
|
|
this.context.clearRect(0, 0, this.image.width, this.image.height);
|
|
}
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "getImageData",
|
|
value: function getImageData(x, y, width, height) {
|
|
var x = x || 0;
|
|
var y = y || 0;
|
|
var width = width || this.image.width;
|
|
var height = height || this.image.height;
|
|
|
|
return this.context.getImageData(x, y, width, height);
|
|
}
|
|
}, {
|
|
key: "getDataURL",
|
|
value: function getDataURL() {
|
|
return this.image.toDataURL();
|
|
}
|
|
|
|
/*
|
|
blur = (function () {
|
|
//source: http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html
|
|
//author: Mario Klingemann
|
|
var mul_table = [512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259];
|
|
var shg_table = [9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24 ];
|
|
return function (radius, x, y, width, height) {
|
|
x = x || 0;
|
|
y = y || 0;
|
|
width = this.image.width || 0;
|
|
height = this.image.height || 0;
|
|
var imageData = this.getImageData(x, y, width, height);
|
|
var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, a_sum,
|
|
r_out_sum, g_out_sum, b_out_sum, a_out_sum,
|
|
r_in_sum, g_in_sum, b_in_sum, a_in_sum,
|
|
pr, pg, pb, pa, rbs;
|
|
var div = radius + radius + 1;
|
|
var w4 = width << 2;
|
|
var widthMinus1 = width - 1;
|
|
var heightMinus1 = height - 1;
|
|
var radiusPlus1 = radius + 1;
|
|
var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;
|
|
var pixels = imageData.data;
|
|
var stackStart = {r: 0, g: 0, b: 0, next: null};
|
|
var stack = stackStart;
|
|
for (i = 1; i < div; i ++) {
|
|
stack = stack.next = {r: 0, g: 0, b: 0, next: null};
|
|
if (i == radiusPlus1) {
|
|
var stackEnd = stack;
|
|
}
|
|
}
|
|
stack.next = stackStart;
|
|
var stackIn = null;
|
|
var stackOut = null;
|
|
yw = yi = 0;
|
|
var mul_sum = mul_table[radius];
|
|
var shg_sum = shg_table[radius];
|
|
for (y = 0; y < height; y ++) {
|
|
r_in_sum = g_in_sum = b_in_sum = a_in_sum = r_sum = g_sum = b_sum = a_sum = 0;
|
|
|
|
r_out_sum = radiusPlus1 * (pr = pixels[yi]);
|
|
g_out_sum = radiusPlus1 * (pg = pixels[yi+1]);
|
|
b_out_sum = radiusPlus1 * (pb = pixels[yi+2]);
|
|
a_out_sum = radiusPlus1 * (pa = pixels[yi+3]);
|
|
|
|
r_sum += sumFactor * pr;
|
|
g_sum += sumFactor * pg;
|
|
b_sum += sumFactor * pb;
|
|
a_sum += sumFactor * pa;
|
|
|
|
stack = stackStart;
|
|
|
|
for (i = 0; i < radiusPlus1; i ++) {
|
|
stack.r = pr;
|
|
stack.g = pg;
|
|
stack.b = pb;
|
|
stack.a = pa;
|
|
stack = stack.next;
|
|
}
|
|
|
|
for (i = 1; i < radiusPlus1; i ++) {
|
|
p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);
|
|
r_sum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);
|
|
g_sum += (stack.g = (pg = pixels[p+1])) * rbs;
|
|
b_sum += (stack.b = (pb = pixels[p+2])) * rbs;
|
|
a_sum += (stack.a = (pa = pixels[p+3])) * rbs;
|
|
|
|
r_in_sum += pr;
|
|
g_in_sum += pg;
|
|
b_in_sum += pb;
|
|
a_in_sum += pa;
|
|
|
|
stack = stack.next;
|
|
}
|
|
|
|
stackIn = stackStart;
|
|
stackOut = stackEnd;
|
|
for (x = 0; x < width; x ++) {
|
|
pixels[yi+3] = pa = (a_sum * mul_sum) >> shg_sum;
|
|
if (pa === 0) {
|
|
pixels[yi] = pixels[yi+1] = pixels[yi+2] = 0;
|
|
}
|
|
else {
|
|
pa = 255 / pa;
|
|
pixels[yi] = ((r_sum * mul_sum) >> shg_sum) * pa;
|
|
pixels[yi+1] = ((g_sum * mul_sum) >> shg_sum) * pa;
|
|
pixels[yi+2] = ((b_sum * mul_sum) >> shg_sum) * pa;
|
|
}
|
|
|
|
|
|
r_sum -= r_out_sum;
|
|
g_sum -= g_out_sum;
|
|
b_sum -= b_out_sum;
|
|
a_sum -= a_out_sum;
|
|
|
|
r_out_sum -= stackIn.r;
|
|
g_out_sum -= stackIn.g;
|
|
b_out_sum -= stackIn.b;
|
|
a_out_sum -= stackIn.a;
|
|
|
|
p = (yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1)) << 2;
|
|
|
|
r_in_sum += (stackIn.r = pixels[p]);
|
|
g_in_sum += (stackIn.g = pixels[p+1]);
|
|
b_in_sum += (stackIn.b = pixels[p+2]);
|
|
a_in_sum += (stackIn.a = pixels[p+3]);
|
|
|
|
r_sum += r_in_sum;
|
|
g_sum += g_in_sum;
|
|
b_sum += b_in_sum;
|
|
a_sum += a_in_sum;
|
|
|
|
stackIn = stackIn.next;
|
|
|
|
r_out_sum += (pr = stackOut.r);
|
|
g_out_sum += (pg = stackOut.g);
|
|
b_out_sum += (pb = stackOut.b);
|
|
a_out_sum += (pa = stackOut.a);
|
|
|
|
r_in_sum -= pr;
|
|
g_in_sum -= pg;
|
|
b_in_sum -= pb;
|
|
a_in_sum -= pa;
|
|
|
|
stackOut = stackOut.next;
|
|
yi += 4;
|
|
}
|
|
yw += width;
|
|
}
|
|
|
|
for (x = 0; x < width; x ++) {
|
|
g_in_sum = b_in_sum = a_in_sum = r_in_sum = g_sum = b_sum = a_sum = r_sum = 0;
|
|
|
|
yi = x << 2;
|
|
r_out_sum = radiusPlus1 * (pr = pixels[yi]);
|
|
g_out_sum = radiusPlus1 * (pg = pixels[yi+1]);
|
|
b_out_sum = radiusPlus1 * (pb = pixels[yi+2]);
|
|
a_out_sum = radiusPlus1 * (pa = pixels[yi+3]);
|
|
|
|
r_sum += sumFactor * pr;
|
|
g_sum += sumFactor * pg;
|
|
b_sum += sumFactor * pb;
|
|
a_sum += sumFactor * pa;
|
|
|
|
stack = stackStart;
|
|
|
|
for (i = 0; i < radiusPlus1; i ++) {
|
|
stack.r = pr;
|
|
stack.g = pg;
|
|
stack.b = pb;
|
|
stack.a = pa;
|
|
stack = stack.next;
|
|
}
|
|
|
|
yp = width;
|
|
|
|
for (i = 1; i <= radius; i ++) {
|
|
yi = (yp + x) << 2;
|
|
|
|
r_sum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);
|
|
g_sum += (stack.g = (pg = pixels[yi+1])) * rbs;
|
|
b_sum += (stack.b = (pb = pixels[yi+2])) * rbs;
|
|
a_sum += (stack.a = (pa = pixels[yi+3])) * rbs;
|
|
|
|
r_in_sum += pr;
|
|
g_in_sum += pg;
|
|
b_in_sum += pb;
|
|
a_in_sum += pa;
|
|
|
|
stack = stack.next;
|
|
|
|
if (i < heightMinus1) {
|
|
yp += width;
|
|
}
|
|
}
|
|
|
|
yi = x;
|
|
stackIn = stackStart;
|
|
stackOut = stackEnd;
|
|
for (y = 0; y < height; y ++) {
|
|
p = yi << 2;
|
|
pixels[p+3] = pa = (a_sum * mul_sum) >> shg_sum;
|
|
if (pa > 0) {
|
|
pa = 255 / pa;
|
|
pixels[p] = ((r_sum * mul_sum) >> shg_sum) * pa;
|
|
pixels[p+1] = ((g_sum * mul_sum) >> shg_sum) * pa;
|
|
pixels[p+2] = ((b_sum * mul_sum) >> shg_sum) * pa;
|
|
}
|
|
else {
|
|
pixels[p] = pixels[p+1] = pixels[p+2] = 0;
|
|
}
|
|
|
|
r_sum -= r_out_sum;
|
|
g_sum -= g_out_sum;
|
|
b_sum -= b_out_sum;
|
|
a_sum -= a_out_sum;
|
|
|
|
r_out_sum -= stackIn.r;
|
|
g_out_sum -= stackIn.g;
|
|
b_out_sum -= stackIn.b;
|
|
a_out_sum -= stackIn.a;
|
|
|
|
p = (x + (((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width)) << 2;
|
|
|
|
r_sum += (r_in_sum += (stackIn.r = pixels[p]));
|
|
g_sum += (g_in_sum += (stackIn.g = pixels[p+1]));
|
|
b_sum += (b_in_sum += (stackIn.b = pixels[p+2]));
|
|
a_sum += (a_in_sum += (stackIn.a = pixels[p+3]));
|
|
|
|
stackIn = stackIn.next;
|
|
|
|
r_out_sum += (pr = stackOut.r);
|
|
g_out_sum += (pg = stackOut.g);
|
|
b_out_sum += (pb = stackOut.b);
|
|
a_out_sum += (pa = stackOut.a);
|
|
|
|
r_in_sum -= pr;
|
|
g_in_sum -= pg;
|
|
b_in_sum -= pb;
|
|
a_in_sum -= pa;
|
|
|
|
stackOut = stackOut.next;
|
|
|
|
yi += width;
|
|
}
|
|
}
|
|
return imageData;
|
|
};
|
|
})();
|
|
CAL.Draw.prototype.drawBlur = (function () {
|
|
|
|
var surface = new CAL.Surface();
|
|
return function (context, number, x, y, radius) {
|
|
if (radius > 0) {
|
|
surface.setSize(this.width + 2*radius, this.height + 2*radius);
|
|
this.drawSimple(surface.context, number, this.centerX+radius, this.centerY+radius);
|
|
var imageData = surface.blur(radius);
|
|
|
|
context.putImageData(imageData, x-this.centerX - radius, y-this.centerY - radius);
|
|
/*
|
|
surface.setSize(this.width, this.height);
|
|
this.drawSimple(surface.context, number, this.centerX, this.centerY);
|
|
var imageData = surface.blur(radius);
|
|
|
|
context.putImageData(imageData, x-this.centerX, y-this.centerY);
|
|
*/
|
|
/*
|
|
}
|
|
else {
|
|
this.drawSimple(context, number, x, y);
|
|
}
|
|
};
|
|
})();
|
|
*/
|
|
|
|
}]);
|
|
|
|
return _class;
|
|
})(CAL.Draw);
|
|
'use strict';
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
|
|
|
|
CAL.Group = (function (_CAL$Surface) {
|
|
var _class = function _class(options) {
|
|
_classCallCheck(this, _class);
|
|
|
|
options = options || {};
|
|
_get(Object.getPrototypeOf(_class.prototype), 'constructor', this).call(this, options);
|
|
|
|
this.active = true;
|
|
this.visible = true;
|
|
|
|
this.objects = [];
|
|
this.useCanvas = options.useCanvas !== undefined ? options.useCanvas : true;
|
|
|
|
this.clearCanvas = true;
|
|
this.drawCanvas = true;
|
|
this.autoClearCanvas = options.autoClearCanvas || false;
|
|
this.autoDrawCanvas = options.autoDrawCanvas || false;
|
|
|
|
this.loop = false;
|
|
this.itemsToAdd = [];
|
|
this.itemsToRemove = [];
|
|
|
|
this.mouse = {
|
|
position: new CAL.Vector(),
|
|
start: new CAL.Vector(),
|
|
delta: new CAL.Vector(),
|
|
length: 0,
|
|
down: false
|
|
};
|
|
|
|
this.lastTime = new Date().getTime();
|
|
|
|
this.keysDown = [];
|
|
this.focus = true;
|
|
|
|
window.addEventListener('keydown', this);
|
|
window.addEventListener('keyup', this);
|
|
window.addEventListener('blur', this);
|
|
window.addEventListener('focus', this);
|
|
};
|
|
|
|
_inherits(_class, _CAL$Surface);
|
|
|
|
_createClass(_class, [{
|
|
key: 'init',
|
|
value: function init() {
|
|
this.useCanvas = false;
|
|
}
|
|
}, {
|
|
key: 'handleEvent',
|
|
value: function handleEvent(event) {
|
|
if (this.useCanvas) {
|
|
switch (event.type) {
|
|
case 'mousedown':
|
|
var offsetX = event.pageX - this.image.offsetLeft;
|
|
var offsetY = event.pageY - this.image.offsetTop;
|
|
|
|
var x = this.mouse.startX = Math.round(this.image.width / this.image.clientWidth * offsetX);
|
|
var y = this.mouse.startY = Math.round(this.image.height / this.image.clientHeight * offsetY);
|
|
|
|
this.mouse.position.copy(new CAL.Vector(x, y));
|
|
this.mouse.start.copy(this.mouse.position);
|
|
this.mouse.delta.identity();
|
|
this.mouse.length = 0;
|
|
this.mouse.down = true;
|
|
|
|
this.mouseDown(this.mouse);
|
|
break;
|
|
|
|
case 'mouseup':
|
|
var offsetX = event.pageX - this.image.offsetLeft;
|
|
var offsetY = event.pageY - this.image.offsetTop;
|
|
|
|
var x = Math.round(this.image.width / this.image.clientWidth * offsetX);
|
|
var y = Math.round(this.image.height / this.image.clientHeight * offsetY);
|
|
|
|
this.mouse.position.copy(new CAL.Vector(x, y));
|
|
this.mouse.down = false;
|
|
|
|
this.mouseUp(this.mouse);
|
|
|
|
this.mouse.start.identity();
|
|
this.mouse.delta.identity();
|
|
this.mouse.length = 0;
|
|
break;
|
|
|
|
case 'mousemove':
|
|
var offsetX = event.pageX - this.image.offsetLeft;
|
|
var offsetY = event.pageY - this.image.offsetTop;
|
|
|
|
var x = Math.round(this.image.width / this.image.clientWidth * offsetX);
|
|
var y = Math.round(this.image.height / this.image.clientHeight * offsetY);
|
|
|
|
var position = new CAL.Vector(x, y);
|
|
|
|
this.mouse.length += this.mouse.position.distanceTo(position);
|
|
|
|
this.mouse.position.copy(position);
|
|
|
|
if (this.mouse.down) {
|
|
this.mouse.delta.copy(this.mouse.position.subtract(this.mouse.start));
|
|
}
|
|
|
|
this.mouseMove(this.mouse);
|
|
break;
|
|
|
|
case 'touchstart':
|
|
event.preventDefault();
|
|
|
|
if (event.touches.length === 1) {
|
|
var touch = event.touches[0];
|
|
|
|
var offsetX = touch.pageX - this.image.offsetLeft;
|
|
var offsetY = touch.pageY - this.image.offsetTop;
|
|
|
|
var x = this.mouse.startX = Math.round(this.image.width / this.image.clientWidth * offsetX);
|
|
var y = this.mouse.startY = Math.round(this.image.height / this.image.clientHeight * offsetY);
|
|
|
|
this.mouse.position.copy(new CAL.Vector(x, y));
|
|
this.mouse.start.copy(this.mouse.position);
|
|
this.mouse.delta.identity();
|
|
this.mouse.length = 0;
|
|
this.mouse.down = true;
|
|
|
|
this.mouseDown(this.mouse);
|
|
}
|
|
break;
|
|
|
|
case 'touchmove':
|
|
event.preventDefault();
|
|
|
|
var touch = event.touches[0];
|
|
|
|
var offsetX = touch.pageX - this.image.offsetLeft;
|
|
var offsetY = touch.pageY - this.image.offsetTop;
|
|
|
|
var x = Math.round(this.image.width / this.image.clientWidth * offsetX);
|
|
var y = Math.round(this.image.height / this.image.clientHeight * offsetY);
|
|
|
|
var position = new CAL.Vector(x, y);
|
|
|
|
this.mouse.length += this.mouse.position.distanceTo(position);
|
|
|
|
this.mouse.position.copy(position);
|
|
|
|
if (this.mouse.down) {
|
|
this.mouse.delta.copy(this.mouse.position.subtract(this.mouse.start));
|
|
}
|
|
|
|
this.mouseMove(this.mouse);
|
|
break;
|
|
|
|
case 'touchend':
|
|
event.preventDefault();
|
|
|
|
if (this.useCanvas && event.touches.length === 0) {
|
|
this.mouse.down = false;
|
|
|
|
this.mouseUp(this.mouse);
|
|
|
|
this.mouse.start.identity();
|
|
this.mouse.delta.identity();
|
|
this.mouse.length = 0;
|
|
}
|
|
break;
|
|
|
|
case 'keydown':
|
|
if (!this.keysDown[event.keyCode]) {
|
|
this.keysDown[event.keyCode] = true;
|
|
this.keyDown(event.keyCode);
|
|
}
|
|
break;
|
|
|
|
case 'keyup':
|
|
this.keysDown[event.keyCode] = false;
|
|
|
|
this.keyUp(event.keyCode);
|
|
break;
|
|
|
|
case 'blur':
|
|
this.focus = false;
|
|
break;
|
|
|
|
case 'focus':
|
|
this.lastTime = new Date().getTime();
|
|
this.focus = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: '_addEventsListeners',
|
|
value: function _addEventsListeners() {
|
|
this.image.addEventListener('mousedown', this);
|
|
this.image.addEventListener('mouseup', this);
|
|
this.image.addEventListener('mousemove', this);
|
|
this.image.addEventListener('touchstart', this);
|
|
this.image.addEventListener('touchmove', this);
|
|
this.image.addEventListener('touchend', this);
|
|
}
|
|
}, {
|
|
key: '_removeEventListeners',
|
|
value: function _removeEventListeners() {
|
|
this.image.removeEventListener('mousedown', this);
|
|
this.image.removeEventListener('mouseup', this);
|
|
this.image.removeEventListener('mousemove', this);
|
|
this.image.removeEventListener('touchstart', this);
|
|
this.image.removeEventListener('touchmove', this);
|
|
this.image.removeEventListener('touchend', this);
|
|
}
|
|
}, {
|
|
key: 'setCanvas',
|
|
value: function setCanvas(canvas) {
|
|
if (this.image instanceof Node) {
|
|
this._removeEventListeners();
|
|
var imageData = this.context.getImageData(0, 0, this.width, this.height);
|
|
this.clear();
|
|
}
|
|
|
|
this.image = canvas;
|
|
this.context = canvas.getContext('2d');
|
|
this.clear();
|
|
|
|
this._addEventsListeners();
|
|
|
|
if (imageData !== undefined) {
|
|
this.context.putImageData(imageData, 0, 0);
|
|
}
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: 'add',
|
|
value: function add() {
|
|
if (this.loop) {
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
var object = arguments[i];
|
|
this.itemsToAdd.push(object);
|
|
}
|
|
} else {
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
var object = arguments[i];
|
|
if (this.objects.indexOf(object) === -1) {
|
|
object.parent = this;
|
|
this.objects.push(object);
|
|
if (object.init) {
|
|
object.init(this);
|
|
}
|
|
}
|
|
}
|
|
this.sort();
|
|
}
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: 'remove',
|
|
value: function remove() {
|
|
if (this.loop) {
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
var object = arguments[i];
|
|
this.itemsToRemove.push(object);
|
|
}
|
|
} else {
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
var object = arguments[i];
|
|
this.objects.remove(object);
|
|
if (object.active && object.remove !== undefined) {
|
|
object.parent = false;
|
|
object.remove(this);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: 'handleAdded',
|
|
value: function handleAdded() {
|
|
for (var i = 0; i < this.itemsToAdd.length; i++) {
|
|
var object = this.itemsToAdd[i];
|
|
this.add(object);
|
|
}
|
|
|
|
for (var i = 0; i < this.itemsToRemove.length; i++) {
|
|
var object = this.itemsToRemove[i];
|
|
this.remove(object);
|
|
}
|
|
}
|
|
}, {
|
|
key: 'sort',
|
|
value: function sort() {
|
|
this.objects.sort(function (a, b) {
|
|
return (a.depth || 0) - (b.depth || 0);
|
|
});
|
|
}
|
|
}, {
|
|
key: 'keyDown',
|
|
value: function keyDown(keyCode) {
|
|
this.loop = true;
|
|
for (var i = this.objects.length - 1; i >= 0; i--) {
|
|
var object = this.objects[i];
|
|
if (object.active && object.keyDown !== undefined) {
|
|
if (object.keyDown(keyCode, this)) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
this.loop = false;
|
|
this.handleAdded();
|
|
}
|
|
}, {
|
|
key: 'keyUp',
|
|
value: function keyUp(keyCode) {
|
|
this.loop = true;
|
|
for (var i = this.objects.length - 1; i >= 0; i--) {
|
|
var object = this.objects[i];
|
|
if (object.active && object.keyUp !== undefined) {
|
|
if (object.keyUp(keyCode, this)) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
this.loop = false;
|
|
this.handleAdded();
|
|
}
|
|
}, {
|
|
key: 'mouseDown',
|
|
value: function mouseDown(mouse) {
|
|
var position = mouse.position.applyMatrix(this.inverseMatrix());
|
|
var start = mouse.start.applyMatrix(this.inverseMatrix());
|
|
|
|
var mouse = {
|
|
position: position,
|
|
start: start,
|
|
delta: position.subtract(start),
|
|
length: mouse.length * this.sx * this.sy,
|
|
down: mouse.down
|
|
};
|
|
|
|
this.loop = true;
|
|
for (var i = this.objects.length - 1; i >= 0; i--) {
|
|
var object = this.objects[i];
|
|
if (object.useCanvas !== true && object.active && object.mouseDown !== undefined) {
|
|
if (object.mouseDown(mouse, this)) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
this.loop = false;
|
|
this.handleAdded();
|
|
}
|
|
}, {
|
|
key: 'mouseUp',
|
|
value: function mouseUp(mouse) {
|
|
var position = mouse.position.applyMatrix(this.inverseMatrix());
|
|
var start = mouse.start.applyMatrix(this.inverseMatrix());
|
|
|
|
var mouse = {
|
|
position: position,
|
|
start: start,
|
|
delta: position.subtract(start),
|
|
length: mouse.length * this.sx * this.sy,
|
|
down: mouse.down
|
|
};
|
|
|
|
this.loop = true;
|
|
for (var i = this.objects.length - 1; i >= 0; i--) {
|
|
var object = this.objects[i];
|
|
if (object.useCanvas !== true && object.active && object.mouseUp !== undefined) {
|
|
if (object.mouseUp(mouse, this)) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
this.loop = false;
|
|
this.handleAdded();
|
|
}
|
|
}, {
|
|
key: 'mouseMove',
|
|
value: function mouseMove(mouse) {
|
|
var position = mouse.position.applyMatrix(this.inverseMatrix());
|
|
var start = mouse.start.applyMatrix(this.inverseMatrix());
|
|
|
|
var mouse = {
|
|
position: position,
|
|
start: start,
|
|
delta: position.subtract(start),
|
|
length: mouse.length * this.sx * this.sy,
|
|
down: mouse.down
|
|
};
|
|
|
|
this.loop = true;
|
|
for (var i = this.objects.length - 1; i >= 0; i--) {
|
|
var object = this.objects[i];
|
|
if (object.useCanvas !== true && object.active && object.mouseMove !== undefined) {
|
|
if (object.mouseMove(mouse, this)) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
this.loop = false;
|
|
this.handleAdded();
|
|
}
|
|
}, {
|
|
key: 'step',
|
|
value: function step(deltaTime) {
|
|
|
|
this.loop = true;
|
|
for (var i = 0; i < this.objects.length; i++) {
|
|
var object = this.objects[i];
|
|
if (object.active && object.step !== undefined) {
|
|
if (object instanceof CAL.Group && !object.useCanvas) {
|
|
if (object.clearCanvas || object.autoClearCanvas) {
|
|
this.clearCanvas = true;
|
|
}
|
|
if (object.drawCanvas || object.autoDrawCanvas) {
|
|
this.drawCanvas = true;
|
|
}
|
|
}
|
|
|
|
object.step(deltaTime, this);
|
|
}
|
|
}
|
|
this.loop = true;
|
|
|
|
if ((this.clearCanvas || this.autoClearCanvas) && this.useCanvas) {
|
|
this.clear();
|
|
}
|
|
if ((this.drawCanvas || this.autoDrawCanvas) && this.useCanvas) {
|
|
this.draw();
|
|
}
|
|
|
|
this.clearCanvas = false;
|
|
this.drawCanvas = false;
|
|
}
|
|
}, {
|
|
key: 'cycle',
|
|
value: function cycle() {
|
|
if (this.focus) {
|
|
var currentTime = new Date().getTime();
|
|
var deltaTime = currentTime - this.lastTime;
|
|
this.lastTime = currentTime;
|
|
|
|
this.step(deltaTime);
|
|
}
|
|
}
|
|
}, {
|
|
key: 'draw',
|
|
value: function draw(context, matrix) {
|
|
context = this.useCanvas ? this.context : context;
|
|
matrix = this.useCanvas ? this : matrix;
|
|
|
|
this.loop = true;
|
|
for (var i = 0; i < this.objects.length; i++) {
|
|
var object = this.objects[i];
|
|
if (object.useCanvas !== true && object.visible && object.draw !== undefined) {
|
|
if (object instanceof CAL.Matrix) {
|
|
object.draw(context, object.multiplyMatrix(matrix));
|
|
} else {
|
|
object.draw(context, matrix);
|
|
}
|
|
}
|
|
}
|
|
this.loop = false;
|
|
this.handleAdded();
|
|
}
|
|
}]);
|
|
|
|
return _class;
|
|
})(CAL.Surface);
|
|
"use strict";
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
|
|
|
|
CAL.Image = (function (_CAL$Draw) {
|
|
var _class = function _class(source, centerX, centerY, numberWidth, numberHeight, options) {
|
|
_classCallCheck(this, _class);
|
|
|
|
options = options || {};
|
|
_get(Object.getPrototypeOf(_class.prototype), "constructor", this).call(this, centerX, centerY, numberWidth, numberHeight, options);
|
|
|
|
this.image = new Image();
|
|
this.source = source;
|
|
};
|
|
|
|
_inherits(_class, _CAL$Draw);
|
|
|
|
_createClass(_class, [{
|
|
key: "load",
|
|
value: function load(callback) {
|
|
var scope = this;
|
|
this.image.onload = function () {
|
|
scope.loaded = true;
|
|
|
|
scope.width = scope.image.width / scope.numberWidth;
|
|
scope.height = scope.image.height / scope.numberHeight;
|
|
|
|
if (callback !== undefined) {
|
|
callback();
|
|
}
|
|
};
|
|
this.image.src = this.source;
|
|
|
|
return this;
|
|
}
|
|
}]);
|
|
|
|
return _class;
|
|
})(CAL.Draw);
|
|
"use strict";
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
CAL.Loader = (function () {
|
|
var _class = function _class(objects) {
|
|
_classCallCheck(this, _class);
|
|
|
|
this.objects = objects || [];
|
|
};
|
|
|
|
_createClass(_class, [{
|
|
key: "add",
|
|
value: function add() {
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
var object = arguments[i];
|
|
if (this.objects.indexOf(object) === -1) {
|
|
this.objects.push(object);
|
|
}
|
|
}
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "remove",
|
|
value: function remove() {
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
var object = arguments[i];
|
|
this.objects.remove(object);
|
|
}
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "load",
|
|
value: function load(callback) {
|
|
var objectsToLoad = this.objects.length;
|
|
for (var i = 0; i < this.objects.length; i++) {
|
|
var object = this.objects[i];
|
|
object.load(function () {
|
|
objectsToLoad -= 1;
|
|
if (objectsToLoad === 0 && callback !== undefined) {
|
|
callback();
|
|
}
|
|
}, this);
|
|
};
|
|
|
|
return this;
|
|
}
|
|
}]);
|
|
|
|
return _class;
|
|
})();
|
|
"use strict";
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
CAL.Tween = (function () {
|
|
var _class = function _class(object, attributes, duration, options) {
|
|
_classCallCheck(this, _class);
|
|
|
|
options = options || {};
|
|
|
|
this.visible = false;
|
|
this.active = true;
|
|
this.depth = -10000;
|
|
|
|
this.object = object;
|
|
this.attributes = attributes;
|
|
this.timer = 0;
|
|
this.duration = duration;
|
|
this.easing = options.easing || CAL.Easings.linear;
|
|
this.callback = options.callback;
|
|
|
|
this.begin = {};
|
|
for (var i in attributes) {
|
|
this.begin[i] = this.object[i];
|
|
}
|
|
|
|
this.change = {};
|
|
for (var i in attributes) {
|
|
this.change[i] = attributes[i] - this.begin[i];
|
|
}
|
|
|
|
this.drawCanvas = options.drawCanvas !== undefined ? options.drawCanvas : true;
|
|
this.clearCanvas = options.clearCanvas !== undefined ? options.clearCanvas : false;
|
|
};
|
|
|
|
_createClass(_class, [{
|
|
key: "start",
|
|
value: function start() {
|
|
this.t = 0;
|
|
this.active = true;
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "stop",
|
|
value: function stop() {
|
|
this.t = 0;
|
|
this.active = false;
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "pause",
|
|
value: function pause() {
|
|
this.active = false;
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "resume",
|
|
value: function resume() {
|
|
this.active = true;
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "step",
|
|
value: function step(deltaTime, group) {
|
|
this.timer += deltaTime;
|
|
|
|
if (this.timer < this.duration) {
|
|
for (var i in this.attributes) {
|
|
var dt = this.timer;
|
|
var d = this.duration;
|
|
var b = this.begin[i];
|
|
var c = this.change[i];
|
|
|
|
this.object[i] = this.easing(dt, b, c, d);
|
|
}
|
|
} else {
|
|
for (var i in this.attributes) {
|
|
this.object[i] = this.attributes[i];
|
|
}
|
|
|
|
if (this.callback !== undefined) {
|
|
this.callback();
|
|
}
|
|
group.remove(this);
|
|
}
|
|
|
|
if (this.clearCanvas) {
|
|
group.clearCanvas = true;
|
|
}
|
|
if (this.drawCanvas) {
|
|
group.drawCanvas = true;
|
|
}
|
|
}
|
|
}]);
|
|
|
|
return _class;
|
|
})();
|
|
"use strict";
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
CAL.TimeLine = (function () {
|
|
var _class = function _class(options) {
|
|
_classCallCheck(this, _class);
|
|
|
|
options = options || {};
|
|
|
|
this.visible = false;
|
|
this.active = true;
|
|
this.depth = -10000;
|
|
|
|
this.moments = [];
|
|
this.autoRemove = options.autoRemove !== undefined ? options.autoremove : true;
|
|
this.loop = options.loop !== undefined ? options.loop : false;
|
|
this.t = 0;
|
|
};
|
|
|
|
_createClass(_class, [{
|
|
key: "addMoment",
|
|
value: function addMoment(time, callback) {
|
|
this.moments.push({
|
|
time: time,
|
|
callback: callback
|
|
});
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "removeMoment",
|
|
value: function removeMoment(remove) {
|
|
for (var i = 0; i < this.moments.length; i++) {
|
|
var moment = this.moments[i];
|
|
|
|
if (moment === remove || moment.time === remove || moment.callback === remove) {
|
|
this.moments.remove(moment);
|
|
}
|
|
}
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "start",
|
|
value: function start() {
|
|
this.t = 0;
|
|
this.active = true;
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "stop",
|
|
value: function stop() {
|
|
this.t = 0;
|
|
this.active = false;
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "pause",
|
|
value: function pause() {
|
|
this.active = false;
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "resume",
|
|
value: function resume() {
|
|
this.active = true;
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "step",
|
|
value: function step(dt) {
|
|
var newTime = this.t + dt;
|
|
var remove = true;
|
|
|
|
for (var i = 0; i < this.moments.length; i++) {
|
|
var moment = this.moments[i];
|
|
if (moment.time >= this.t) {
|
|
if (moment.time < newTime) {
|
|
moment.callback();
|
|
} else {
|
|
remove = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (remove && this.loop) {
|
|
this.t = 0;
|
|
} else if (remove && this.autoRemove) {
|
|
this.parent.remove(this);
|
|
}
|
|
|
|
this.t = newTime;
|
|
}
|
|
}]);
|
|
|
|
return _class;
|
|
})();
|
|
"use strict";
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
CAL.BezierPoint = (function () {
|
|
var _class = function _class(position, handleIn, handleOut) {
|
|
_classCallCheck(this, _class);
|
|
|
|
this.position = position || new CAL.Vector();
|
|
this.handleIn = handleIn || new CAL.Vector().copy(position);
|
|
this.handleOut = handleOut || new CAL.Vector().copy(position);
|
|
};
|
|
|
|
_createClass(_class, [{
|
|
key: "copy",
|
|
value: function copy(bezierPoint) {
|
|
this.position.copy(bezierPoint.position);
|
|
this.handleIn.copy(bezierPoint.handleIn);
|
|
this.handleOut.copy(bezierPoint.handleOut);
|
|
}
|
|
}, {
|
|
key: "applyMatrix",
|
|
value: function applyMatrix(matrix) {
|
|
var position = this.position.applyMatrix(matrix);
|
|
var handleIn = this.handleIn.applyMatrix(matrix);
|
|
var handleOut = this.handleOut.applyMatrix(matrix);
|
|
|
|
return new CAL.BezierPoint(position, handleIn, handleOut);
|
|
}
|
|
}, {
|
|
key: "draw",
|
|
value: function draw(context) {
|
|
var handleIn = this.handleIn.add(this.position);
|
|
var handleOut = this.handleOut.add(this.position);
|
|
|
|
context.strokeStyle = "#09F";
|
|
|
|
context.beginPath();
|
|
context.moveTo(handleIn.x, handleIn.y);
|
|
context.lineTo(this.position.x, this.position.y);
|
|
context.lineTo(handleOut.x, handleOut.y);
|
|
context.stroke();
|
|
|
|
context.beginPath();
|
|
context.arc(this.position.x, this.position.y, 10, 0, Math.PI * 2, true);
|
|
context.stroke();
|
|
|
|
context.beginPath();
|
|
context.arc(handleIn.x, handleIn.y, 5, 0, Math.PI * 2, true);
|
|
context.stroke();
|
|
|
|
context.beginPath();
|
|
context.arc(handleOut.x, handleOut.y, 5, 0, Math.PI * 2, true);
|
|
context.stroke();
|
|
}
|
|
}]);
|
|
|
|
return _class;
|
|
})();
|
|
"use strict";
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
|
|
|
|
CAL.Shape = (function (_CAL$Matrix) {
|
|
var _class = function _class(options) {
|
|
_classCallCheck(this, _class);
|
|
|
|
options = options || {};
|
|
_get(Object.getPrototypeOf(_class.prototype), "constructor", this).call(this, options);
|
|
|
|
this.visible = options.visible !== undefined ? options.visible : true;
|
|
this.active = false;
|
|
this.depth = options.depth || 0;
|
|
this.lines = [];
|
|
|
|
this.closePath = options.closePath !== undefined ? options.closePath : true;
|
|
this.lineColor = options.lineColor !== undefined ? options.lineColor : new CAL.Color();
|
|
this.shapeColor = options.shapeColor !== undefined ? options.shapeColor : new CAL.Color();
|
|
this.lineWidth = options.lineWidth || 1;
|
|
this.lineJoin = options.lineJoin || "round";
|
|
this.lineCap = options.lineCap || "round";
|
|
|
|
this.points = [];
|
|
if (options.points) {
|
|
for (var i = 0; i < options.points.length; i++) {
|
|
var point = options.points[i];
|
|
this.addPoint(point);
|
|
}
|
|
}
|
|
};
|
|
|
|
_inherits(_class, _CAL$Matrix);
|
|
|
|
_createClass(_class, [{
|
|
key: "addPoint",
|
|
value: function addPoint() {
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
var point = arguments[i];
|
|
|
|
if (point instanceof CAL.Vector) {
|
|
point = new CAL.BezierPoint(point);
|
|
}
|
|
|
|
this.points.push(point);
|
|
}
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "applyMatrix",
|
|
value: function applyMatrix(matrix) {
|
|
for (var i = 0; i < this.points.length; i++) {
|
|
var point = this.points[i];
|
|
point.copy(point.applyMatrix(matrix));
|
|
}
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "hit",
|
|
value: function hit(vector, matrix) {
|
|
if (matrix instanceof CAL.Matrix) {
|
|
vector = vector.applyMatrix(matrix.multiplyMatrix(this.inverseMatrix()));
|
|
} else {
|
|
vector = vector.applyMatrix(this.inverseMatrix());
|
|
}
|
|
|
|
if (this.points.length <= 3) {
|
|
return false;
|
|
}
|
|
|
|
for (var i = 0; i < this.points.length; i++) {
|
|
if (vector.subtract(this.points[i].position).dot(this.getNormal(i)) > 0) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}, {
|
|
key: "getBoundingBox",
|
|
value: function getBoundingBox() {
|
|
var minX = Infinity;
|
|
var minY = Infinity;
|
|
var maxX = -Infinity;
|
|
var maxY = -Infinity;
|
|
|
|
for (var i = 0; i < this.points.length; i++) {
|
|
var point = this.points[i].position;
|
|
|
|
minX = point.x < minX ? point.x : minX;
|
|
minY = point.y < minY ? point.y : minY;
|
|
maxX = point.x > maxX ? point.x : maxX;
|
|
maxY = point.y > maxY ? point.y : maxY;
|
|
}
|
|
|
|
return {
|
|
top: minY,
|
|
left: minX,
|
|
bottom: maxY,
|
|
right: maxX,
|
|
width: maxX - minX,
|
|
height: maxY - minY
|
|
};
|
|
}
|
|
}, {
|
|
key: "getNormal",
|
|
value: function getNormal(i) {
|
|
var pointA = this.points[(i + 1) % this.points.length].position;
|
|
var pointB = this.points[i].position;
|
|
|
|
return pointA.subtract(pointB).normal().normalize();
|
|
}
|
|
}, {
|
|
key: "setContext",
|
|
value: function setContext(context, matrix) {
|
|
var matrix = matrix || this;
|
|
|
|
context.beginPath();
|
|
|
|
var currentPoint = this.points[0].applyMatrix(matrix);
|
|
|
|
context.moveTo(currentPoint.position.x, currentPoint.position.y);
|
|
|
|
var length = this.closePath ? this.points.length + 1 : this.points.length;
|
|
for (var i = 1; i < length; i++) {
|
|
var prevPoint = currentPoint;
|
|
var currentPoint = this.points[i % this.points.length].applyMatrix(matrix);
|
|
|
|
var handleOut = prevPoint.handleOut;
|
|
var handleIn = currentPoint.handleIn;
|
|
var position = currentPoint.position;
|
|
|
|
context.bezierCurveTo(handleOut.x, handleOut.y, handleIn.x, handleIn.y, position.x, position.y);
|
|
}
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "clip",
|
|
value: function clip(context, matrix) {
|
|
this.setContext(context, matrix);
|
|
context.clip();
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "fill",
|
|
value: function fill(context, matrix) {
|
|
this.setContext(context, matrix);
|
|
|
|
this.shapeColor.setFill(context);
|
|
|
|
context.fill();
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "stroke",
|
|
value: function stroke(context, matrix) {
|
|
this.setContext(context, matrix);
|
|
|
|
context.lineColor = this.lineColor;
|
|
context.lineWidth = this.lineWidth;
|
|
context.lineJoin = this.lineJoin;
|
|
context.lineCap = this.lineCap;
|
|
|
|
this.lineColor.setStroke(context);
|
|
|
|
context.stroke();
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "draw",
|
|
value: function draw(context, matrix) {
|
|
this.setContext(context, matrix);
|
|
|
|
if (this.shapeColor) {
|
|
this.shapeColor.setFill(context);
|
|
context.fill();
|
|
}
|
|
|
|
if (this.lineColor) {
|
|
context.lineColor = this.lineColor;
|
|
context.lineWidth = this.lineWidth;
|
|
context.lineJoin = this.lineJoin;
|
|
context.lineCap = this.lineCap;
|
|
this.lineColor.setStroke(context);
|
|
context.stroke();
|
|
}
|
|
}
|
|
}]);
|
|
|
|
return _class;
|
|
})(CAL.Matrix);
|
|
"use strict";
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
|
|
|
|
CAL.Text = (function (_CAL$Matrix) {
|
|
var _class = function _class(options) {
|
|
_classCallCheck(this, _class);
|
|
|
|
options = options || {};
|
|
_get(Object.getPrototypeOf(_class.prototype), "constructor", this).call(this, options);
|
|
|
|
this.visible = options.visible !== undefined ? options.visible : true;
|
|
this.active = options.active !== undefined ? options.active : true;
|
|
this.depth = options.depth || 0;
|
|
this.text = options.text || "";
|
|
this.style = options.style || "normal";
|
|
this.variant = options.variant || "normal";
|
|
this.weight = options.weight || "normal";
|
|
this.size = options.size || 12;
|
|
this.font = options.font || "Arial";
|
|
this.align = options.align || "left";
|
|
this.baseline = options.baseline || "bottom";
|
|
|
|
this.textAlign = options.textAlign || "left";
|
|
|
|
this.color = options.color || new CAL.Color();
|
|
this.alpha = typeof options.alpha === "number" ? options.alpha : 1;
|
|
};
|
|
|
|
_inherits(_class, _CAL$Matrix);
|
|
|
|
_createClass(_class, [{
|
|
key: "measure",
|
|
value: function measure(text) {
|
|
text = text || this.text;
|
|
|
|
context.font = [this.style, this.variant, this.weight, this.size + "px", this.font].join(" ");
|
|
|
|
return context.measureText(text).width;
|
|
}
|
|
}, {
|
|
key: "drawText",
|
|
value: function drawText(context, text, x, y) {
|
|
context.font = [this.style, this.variant, this.weight, this.size + "px", this.font].join(" ");
|
|
|
|
context.textAlign = this.align;
|
|
context.textBaseline = this.baseline;
|
|
|
|
this.color.setColor(context);
|
|
|
|
context.fillText(text, x, y);
|
|
}
|
|
}, {
|
|
key: "drawTextAlpha",
|
|
value: function drawTextAlpha(context, text, x, y, apha) {
|
|
context.globalAlpha = apha;
|
|
|
|
this.drawText(context, text, x, y);
|
|
|
|
context.globalAlpha = 1;
|
|
}
|
|
}, {
|
|
key: "draw",
|
|
value: function draw(context, matrix) {
|
|
context.save();
|
|
|
|
context.globalAlpha = this.alpha;
|
|
matrix.setMatrixContext(context);
|
|
|
|
this.drawText(context, this.text, 0, 0);
|
|
|
|
context.restore();
|
|
}
|
|
}, {
|
|
key: "clone",
|
|
value: function clone() {
|
|
return new CAL.text({
|
|
style: this.style,
|
|
variant: this.variant,
|
|
weight: this.weight,
|
|
size: this.size,
|
|
font: this.font,
|
|
color: this.color.clone()
|
|
});
|
|
}
|
|
}]);
|
|
|
|
return _class;
|
|
})(CAL.Matrix);
|
|
"use strict";
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
CAL.KeyListener = (function () {
|
|
var _class = function _class(options) {
|
|
_classCallCheck(this, _class);
|
|
|
|
options = options || {};
|
|
|
|
this.visible = false;
|
|
this.active = options.active !== undefined ? options.active : true;
|
|
this.depth = -10000;
|
|
|
|
this.actions = options.actions || {};
|
|
};
|
|
|
|
_createClass(_class, [{
|
|
key: "add",
|
|
value: function add(key, callback) {
|
|
this.actions[key] = callback;
|
|
|
|
return this;
|
|
}
|
|
}, {
|
|
key: "keyDown",
|
|
value: function keyDown(key) {
|
|
if (this.actions[key]) {
|
|
this.actions[key]();
|
|
}
|
|
}
|
|
}]);
|
|
|
|
return _class;
|
|
})();
|
|
"use strict";
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
|
|
|
|
CAL.Star = (function (_CAL$Shape) {
|
|
var _class = function _class(rays, outerRadius, innerRadius, options) {
|
|
_classCallCheck(this, _class);
|
|
|
|
_get(Object.getPrototypeOf(_class.prototype), "constructor", this).call(this, options);
|
|
|
|
this.set(rays, outerRadius, innerRadius);
|
|
};
|
|
|
|
_inherits(_class, _CAL$Shape);
|
|
|
|
_createClass(_class, [{
|
|
key: "set",
|
|
value: function set(rays, outerRadius, innerRadius) {
|
|
this.rays = rays || 5;
|
|
this.outerRadius = outerRadius || 100;
|
|
this.innerRadius = innerRadius || 50;
|
|
|
|
this.points = [];
|
|
|
|
var even = true;
|
|
for (var rad = 0; rad < Math.PI * 2; rad += Math.PI / this.rays) {
|
|
var radius = even ? this.outerRadius : this.innerRadius;
|
|
|
|
var x = Math.cos(rad) * radius;
|
|
var y = Math.sin(rad) * radius;
|
|
|
|
this.addPoint(new CAL.BezierPoint(new CAL.Vector(x, y), null, null));
|
|
|
|
even = !even;
|
|
}
|
|
}
|
|
}, {
|
|
key: "toShape",
|
|
value: function toShape() {
|
|
return new CAL.Shape({
|
|
points: this.points,
|
|
closedPath: true,
|
|
lineColor: this.lineColor,
|
|
shapeColor: this.shapeColor,
|
|
lineWidth: this.lineWidth,
|
|
lineJoin: this.lineJoin,
|
|
lineCap: this.lineCap,
|
|
matrix: this.matrix
|
|
});
|
|
}
|
|
}]);
|
|
|
|
return _class;
|
|
})(CAL.Shape);
|
|
"use strict";
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
|
|
|
|
CAL.Circle = (function (_CAL$Shape) {
|
|
var _class = function _class(radius, options) {
|
|
_classCallCheck(this, _class);
|
|
|
|
_get(Object.getPrototypeOf(_class.prototype), "constructor", this).call(this, options);
|
|
|
|
this.set(radius);
|
|
};
|
|
|
|
_inherits(_class, _CAL$Shape);
|
|
|
|
_createClass(_class, [{
|
|
key: "set",
|
|
value: function set(radius) {
|
|
this.points = [];
|
|
|
|
this.radius = typeof radius === "number" ? radius : 100;
|
|
var offset = 4 * (Math.sqrt(2) - 1) / 3 * radius;
|
|
|
|
this.addPoint(new CAL.BezierPoint(new CAL.Vector(0, radius), new CAL.Vector(-offset, radius), new CAL.Vector(offset, radius)), new CAL.BezierPoint(new CAL.Vector(radius, 0), new CAL.Vector(radius, offset), new CAL.Vector(radius, -offset)), new CAL.BezierPoint(new CAL.Vector(0, -radius), new CAL.Vector(offset, -radius), new CAL.Vector(-offset, -radius)), new CAL.BezierPoint(new CAL.Vector(-radius, 0), new CAL.Vector(-radius, -offset), new CAL.Vector(-radius, offset)));
|
|
}
|
|
}, {
|
|
key: "toShape",
|
|
value: function toShape() {
|
|
return new CAL.Shape({
|
|
points: this.points,
|
|
closedPath: true,
|
|
lineColor: this.lineColor,
|
|
shapeColor: this.shapeColor,
|
|
lineWidth: this.lineWidth,
|
|
lineJoin: this.lineJoin,
|
|
lineCap: this.lineCap,
|
|
matrix: this.matrix
|
|
});
|
|
}
|
|
}]);
|
|
|
|
return _class;
|
|
})(CAL.Shape);
|
|
"use strict";
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
|
|
|
|
CAL.Polygon = (function (_CAL$Shape) {
|
|
var _class = function _class(angles, radius, options) {
|
|
_classCallCheck(this, _class);
|
|
|
|
_get(Object.getPrototypeOf(_class.prototype), "constructor", this).call(this, options);
|
|
|
|
this.set(angles);
|
|
};
|
|
|
|
_inherits(_class, _CAL$Shape);
|
|
|
|
_createClass(_class, [{
|
|
key: "set",
|
|
value: function set(angles, radius) {
|
|
this.points = [];
|
|
|
|
this.angles = angles || 8;
|
|
this.radius = radius || 100;
|
|
|
|
for (var rad = 0; rad < Math.PI * 2; rad += Math.PI * 2 / this.angles) {
|
|
var x = Math.cos(rad) * this.radius;
|
|
var y = Math.sin(rad) * this.radius;
|
|
|
|
this.addPoint(new CAL.BezierPoint(new CAL.Vector(x, y), null, null));
|
|
}
|
|
}
|
|
}, {
|
|
key: "toShape",
|
|
value: function toShape() {
|
|
return new CAL.Shape({
|
|
points: this.points,
|
|
closedPath: true,
|
|
lineColor: this.lineColor,
|
|
shapeColor: this.shapeColor,
|
|
lineWidth: this.lineWidth,
|
|
lineJoin: this.lineJoin,
|
|
lineCap: this.lineCap,
|
|
matrix: this.matrix
|
|
});
|
|
}
|
|
}]);
|
|
|
|
return _class;
|
|
})(CAL.Shape);
|
|
"use strict";
|
|
|
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
|
|
|
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
|
|
|
|
CAL.RoundRect = (function (_CAL$Shape) {
|
|
var _class = function _class(radius, width, height, options) {
|
|
_classCallCheck(this, _class);
|
|
|
|
_get(Object.getPrototypeOf(_class.prototype), "constructor", this).call(this, options);
|
|
|
|
this.set(radius, width, height);
|
|
};
|
|
|
|
_inherits(_class, _CAL$Shape);
|
|
|
|
_createClass(_class, [{
|
|
key: "set",
|
|
value: function set(radius, width, height) {
|
|
this.points = [];
|
|
|
|
this.radius = typeof radius === "number" ? radius : 50;
|
|
this.width = typeof width === "number" ? width : 200;
|
|
this.height = typeof height === "number" ? height : 200;
|
|
|
|
this.addPoint(new CAL.Vector(-this.width / 2, -this.height / 2), new CAL.Vector(-this.width / 2, this.height / 2), new CAL.Vector(this.width / 2, this.height / 2), new CAL.Vector(this.width / 2, -this.height / 2));
|
|
}
|
|
}, {
|
|
key: "toShape",
|
|
value: function toShape() {
|
|
var points = [];
|
|
|
|
var prevPoint;
|
|
var currentPoint = this.points[this.points.length - 1].position.applyMatrix(this);
|
|
var nextPoint = this.points[0].position.applyMatrix(this);
|
|
|
|
for (var i = 0; i < this.points.length; i++) {
|
|
prevPoint = currentPoint;
|
|
currentPoint = nextPoint;
|
|
var nextPoint = this.points[(i + 1) % this.points.length].position.applyMatrix(this);
|
|
|
|
var maxRadius = Math.min(prevPoint.subtract(currentPoint).length(), nextPoint.subtract(currentPoint).length()) / 2;
|
|
var radius = Math.min(this.radius, maxRadius);
|
|
|
|
var start = currentPoint.add(prevPoint.subtract(currentPoint).setLength(radius));
|
|
var end = currentPoint.add(nextPoint.subtract(currentPoint).setLength(radius));
|
|
|
|
var handleIn = currentPoint.add(prevPoint.subtract(currentPoint).setLength(radius / 3));
|
|
var handleOut = currentPoint.add(nextPoint.subtract(currentPoint).setLength(radius / 3));
|
|
|
|
var inverseMatrix = this.inverseMatrix();
|
|
|
|
points.push(new CAL.BezierPoint(new CAL.Vector().copy(start).applyMatrix(inverseMatrix), null, new CAL.Vector().copy(handleIn).applyMatrix(inverseMatrix)));
|
|
points.push(new CAL.BezierPoint(new CAL.Vector().copy(end).applyMatrix(inverseMatrix), new CAL.Vector().copy(handleOut).applyMatrix(inverseMatrix), null));
|
|
}
|
|
|
|
return new CAL.Shape({
|
|
points: points,
|
|
closedPath: true,
|
|
lineColor: this.lineColor,
|
|
shapeColor: this.shapeColor,
|
|
lineWidth: this.lineWidth,
|
|
lineJoin: this.lineJoin,
|
|
lineCap: this.lineCap,
|
|
matrix: this.matrix
|
|
});
|
|
}
|
|
}, {
|
|
key: "setContext",
|
|
value: function setContext(context, matrix) {
|
|
var matrix = matrix || this;
|
|
context.beginPath();
|
|
|
|
var prevPoint;
|
|
var currentPoint = this.points[this.points.length - 1].position.applyMatrix(matrix);
|
|
var nextPoint = this.points[0].position.applyMatrix(matrix);
|
|
|
|
for (var i = 0; i < this.points.length; i++) {
|
|
prevPoint = currentPoint;
|
|
currentPoint = nextPoint;
|
|
var nextPoint = this.points[(i + 1) % this.points.length].position.applyMatrix(matrix);
|
|
|
|
var maxRadius = Math.min(prevPoint.subtract(currentPoint).length(), nextPoint.subtract(currentPoint).length()) / 2;
|
|
var radius = Math.min(this.radius, maxRadius);
|
|
|
|
var start = currentPoint.add(prevPoint.subtract(currentPoint).setLength(radius));
|
|
var end = currentPoint.add(nextPoint.subtract(currentPoint).setLength(radius));
|
|
|
|
context.lineTo(start.x, start.y);
|
|
context.quadraticCurveTo(currentPoint.x, currentPoint.y, end.x, end.y);
|
|
}
|
|
context.closePath();
|
|
}
|
|
}]);
|
|
|
|
return _class;
|
|
})(CAL.Shape); |