@@ -9,36 +9,64 @@ Elm.Native.Graphics.Matrix = function(elm) {
9 try { Float32Array; } catch(e) { Float32Array = Array; }
9 try { Float32Array; } catch(e) { Float32Array = Array; }
10 var A = Float32Array;
10 var A = Float32Array;
12+ // layout of matrix in an array is
18+ // new A([ m11, m12, dx, m21, m22, dy ])
12 var identity = new A([1,0,0,0,1,0]);
20 var identity = new A([1,0,0,0,1,0]);
21+ function matrix(m11, m21, m12, m22, dx, dy) {
22+ return new A([m11, m12, dx, m21, m22, dy]);
14 function rotate(t,m) {
25 function rotate(t,m) {
15 var c = Math.cos(t);
26 var c = Math.cos(t);
16 var s = Math.sin(t);
27 var s = Math.sin(t);
17− var m0 = m[0], m1 = m[1], m3 = m[3], m4 = m[4];
28+ var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];
18− return new A([m0*c + m1*-s, m0*s + m1*c, m[2],
29+ return new A([m11*c + m12*s, -m11*s + m12*c, m[2],
19− m3*c + m4*-s, m3*s + m4*c, m[5]]);
30+ m21*c + m22*s, -m21*s + m22*c, m[5]]);
21− function scale(x,y,m) {
22− return new A([m[0]*x, m[1]*y, m[2],
23− m[3]*x, m[4]*y, m[5]]);
25 function move(x,y,m) {
32 function move(x,y,m) {
26− var m0 = m[0], m1 = m[1], m3 = m[3], m4 = m[4];
33+ var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];
27− return new A([m0, m1, m0*x + m1*y + m[2],
34+ return new A([m11, m12, m11*x + m12*y + m[2],
28− m3, m4, m3*x + m4*y + m[5]]);
35+ m21, m22, m21*x + m22*y + m[5]]);
30− function matrix(n11, n12, n21, n22, dx, dy, m) {
37+ function scale(s,m) { return new A([m[0]*s, m[1]*s, m[2], m[3]*s, m[4]*s, m[5]]); }
31− var m0 = m[0], m1 = m[1], m3 = m[3], m4 = m[4];
38+ function scaleX(x,m) { return new A([m[0]*x, m[1], m[2], m[3]*x, m[4], m[5]]); }
39+ function scaleY(y,m) { return new A([m[0], m[1]*y, m[2], m[3], m[4]*y, m[5]]); }
40+ function reflectX(m) { return new A([-m[0], m[1], m[2], -m[3], m[4], m[5]]); }
41+ function reflectY(m) { return new A([m[0], -m[1], m[2], m[3], -m[4], m[5]]); }
43+ function transform(m11, m21, m12, m22, mdx, mdy, n) {
44+ var n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5];
32− return new A([m0*n11 + m1*n12, m0*n21 + m1*n22, m0*dx + m1*dy + m[2],
45+ return new A([m11*n11 + m12*n21,
33− m3*n11 + m4*n12, m3*n21 + m4*n22, m3*dx + m4*dy + m[5]]);
46+ m11*n12 + m12*n22,
47+ m11*ndx + m12*ndy + mdx,
50+ m21*ndx + m22*ndy + mdy]);
53+ function multiply(m, n) {
54+ return transform(m[0], m[3], m[1], m[4], m[2], m[5], n);
36 return elm.Native.Graphics.Matrix = {
57 return elm.Native.Graphics.Matrix = {
37 identity:identity,
58 identity:identity,
60+ multiply:F2(multiply),
62+ transform:F7(transform),
38 rotate:F2(rotate),
63 rotate:F2(rotate),
40 move:F3(move),
64 move:F3(move),
41− matrix:F7(matrix)
65+ scale:F2(scale),