in seriously.js [5820:5907]
function recompute() {
var matrix = me.matrix,
angle,
s, c,
m00,
m01,
m02,
m03,
m10,
m11,
m12,
m13;
function translate(x, y) {
matrix[12] = matrix[0] * x + matrix[4] * y + matrix[12];
matrix[13] = matrix[1] * x + matrix[5] * y + matrix[13];
matrix[14] = matrix[2] * x + matrix[6] * y + matrix[14];
matrix[15] = matrix[3] * x + matrix[7] * y + matrix[15];
}
if (!translateX &&
!translateY &&
!rotation &&
!skewX &&
!skewY &&
scaleX === 1 &&
scaleY === 1
) {
me.transformed = false;
return;
}
//calculate transformation matrix
mat4.identity(matrix);
translate(translateX + centerX, translateY + centerY);
//skew
if (skewX) {
matrix[4] = skewX / me.width;
}
if (skewY) {
matrix[1] = skewY / me.height;
}
if (rotation) {
m00 = matrix[0];
m01 = matrix[1];
m02 = matrix[2];
m03 = matrix[3];
m10 = matrix[4];
m11 = matrix[5];
m12 = matrix[6];
m13 = matrix[7];
//rotate
angle = -(degrees ? rotation * Math.PI / 180 : rotation);
//...rotate
s = Math.sin(angle);
c = Math.cos(angle);
matrix[0] = m00 * c + m10 * s;
matrix[1] = m01 * c + m11 * s;
matrix[2] = m02 * c + m12 * s;
matrix[3] = m03 * c + m13 * s;
matrix[4] = m10 * c - m00 * s;
matrix[5] = m11 * c - m01 * s;
matrix[6] = m12 * c - m02 * s;
matrix[7] = m13 * c - m03 * s;
}
//scale
if (scaleX !== 1) {
matrix[0] *= scaleX;
matrix[1] *= scaleX;
matrix[2] *= scaleX;
matrix[3] *= scaleX;
}
if (scaleY !== 1) {
matrix[4] *= scaleY;
matrix[5] *= scaleY;
matrix[6] *= scaleY;
matrix[7] *= scaleY;
}
translate(-centerX, -centerY);
me.transformed = true;
}