on a654bfa help sign in
elk/libraries/Native/Transform2D.js
103 lines 3.1 kB history raw
1Elm.Native.Transform2D = {};
2Elm.Native.Transform2D.make = function(elm) {
4 elm.Native = elm.Native || {};
5 elm.Native.Transform2D = elm.Native.Transform2D || {};
6 if (elm.Native.Transform2D.values) return elm.Native.Transform2D.values;
8 var A;
9 if (typeof Float32Array === 'undefined') {
10 A = function(arr) {
11 this.length = arr.length;
12 this[0] = arr[0];
13 this[1] = arr[1];
14 this[2] = arr[2];
15 this[3] = arr[3];
16 this[4] = arr[4];
17 this[5] = arr[5];
18 };
19 } else {
20 A = Float32Array;
21 }
23 // layout of matrix in an array is
24 //
25 // | m11 m12 dx |
26 // | m21 m22 dy |
27 // | 0 0 1 |
28 //
29 // new A([ m11, m12, dx, m21, m22, dy ])
31 var identity = new A([1,0,0,0,1,0]);
32 function matrix(m11, m12, m21, m22, dx, dy) {
33 return new A([m11, m12, dx, m21, m22, dy]);
34 }
35 function rotation(t) {
36 var c = Math.cos(t);
37 var s = Math.sin(t);
38 return new A([c, -s, 0, s, c, 0]);
39 }
40 function translation(x,y) {
41 return new A([1,0,x,0,1,y]);
42 }
43 function rotate(t,m) {
44 var c = Math.cos(t);
45 var s = Math.sin(t);
46 var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];
47 return new A([m11*c + m12*s, -m11*s + m12*c, m[2],
48 m21*c + m22*s, -m21*s + m22*c, m[5]]);
49 }
50 /*
51 function move(xy,m) {
52 var x = xy._0;
53 var y = xy._1;
54 var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4];
55 return new A([m11, m12, m11*x + m12*y + m[2],
56 m21, m22, m21*x + m22*y + m[5]]);
57 }
58 function scale(s,m) { return new A([m[0]*s, m[1]*s, m[2], m[3]*s, m[4]*s, m[5]]); }
59 function scaleX(x,m) { return new A([m[0]*x, m[1], m[2], m[3]*x, m[4], m[5]]); }
60 function scaleY(y,m) { return new A([m[0], m[1]*y, m[2], m[3], m[4]*y, m[5]]); }
61 function reflectX(m) { return new A([-m[0], m[1], m[2], -m[3], m[4], m[5]]); }
62 function reflectY(m) { return new A([m[0], -m[1], m[2], m[3], -m[4], m[5]]); }
64 function transform(m11, m21, m12, m22, mdx, mdy, n) {
65 var n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5];
66 return new A([m11*n11 + m12*n21,
67 m11*n12 + m12*n22,
68 m11*ndx + m12*ndy + mdx,
69 m21*n11 + m22*n21,
70 m21*n12 + m22*n22,
71 m21*ndx + m22*ndy + mdy]);
72 }
73 */
74 function multiply(m, n) {
75 var m11 = m[0], m12 = m[1], m21 = m[3], m22 = m[4], mdx = m[2], mdy = m[5];
76 var n11 = n[0], n12 = n[1], n21 = n[3], n22 = n[4], ndx = n[2], ndy = n[5];
77 return new A([m11*n11 + m12*n21,
78 m11*n12 + m12*n22,
79 m11*ndx + m12*ndy + mdx,
80 m21*n11 + m22*n21,
81 m21*n12 + m22*n22,
82 m21*ndx + m22*ndy + mdy]);
83 }
85 return elm.Native.Transform2D.values = {
86 identity:identity,
87 matrix:F6(matrix),
88 rotation:rotation,
89 translation:F2(translation),
90 multiply:F2(multiply)
91 /*
92 transform:F7(transform),
93 rotate:F2(rotate),
94 move:F2(move),
95 scale:F2(scale),
96 scaleX:F2(scaleX),
97 scaleY:F2(scaleY),
98 reflectX:reflectX,
99 reflectY:reflectY
100 */
101 };
103};