on master help sign in
Add a matrix library and switch collage over to use it.
commit0050bfa845106532d8f58a26ef5b9c65d32e42a3 authorevancz <info@elm-lang.org> dateSat 16 Mar 2013, 01:11 (14 years ago) parentf1071b7
2 files changed+61−18
libraries/Graphics/Collage.elm+17−18 libraries/Native/Graphics/Matrix.js+44
libraries/Graphics/Collage.elm+17−18
@@ -15,7 +15,7 @@ data FillStyle
1515 | Gradient Gradient
1616
1717data BasicForm
18− = FLine LineStyle Line
18+ = FPath LineStyle Path
1919 | FShape (Either LineStyle FillStyle) Shape
2020 | FImage Int Int (Int,Int) String
2121 | FElement Element
@@ -32,28 +32,27 @@ textured src shape = fill (Texture src) shape
3232gradient : Gradient -> Shape -> Form
3333gradient grad shape = fill (Gradient grad) shape
3434
35+outline : LineStyle -> Shape -> Form
3536outline style shape = Form [] (FShape (Left style) shape)
36−trace style line = Form [] (FLine style line)
3737
38+outline : LineStyle -> Path -> Form
39+trace style path = Form [] (FPath style path)
40+
41+sprite : Int -> Int -> (Int,Int) -> String -> Form
3842sprite w h pos src = Form [] (FImage w h pos src)
43+
44+toForm : Element -> Form
3945toForm e = Form [] (FElement e)
4046
4147group fs = Form [] (FGroup fs)
4248
43−add t f = { transforms = Matrix.multiply t f.transforms, form = f.form }
44−
45−radians t = t
46−degrees dep = pi * deg / 180
47−rotations rot = 2 * pi * rot
48−
49−rotate t = add (Matrix.rotate t)
50−
51−scale s = add (Matrix.scale s s)
52−scaleX s = add (Matrix.scale s 1)
53−scaleY s = add (Matrix.scale 1 s)
54−
55−move x y = add (Matrix.translate x y)
56−moveX x = add (Matrix.translate x 0)
57−moveY y = add (Matrix.translate 0 y)
49+rotate t f = { form = f.form, transform = Matrix.rotate t f.transform }
50+scale s f = { form = f.form, transform = Matrix.scale s s f.transform }
51+scaleX s f = { form = f.form, transform = Matrix.scale s 1 f.transform }
52+scaleY s f = { form = f.form, transform = Matrix.scale 1 s f.transform }
53+move x y f = { form = f.form, transform = Matrix.move x y f.transform }
54+moveX x f = { form = f.form, transform = Matrix.move x 0 f.transform }
55+moveY y f = { form = f.form, transform = Matrix.move 0 y f.transform }
5856
59−transform a b c d e f = add (Matrix.matrix a b c d e f)
57+transform u v w x y z f =
58+ { form = f.form, transform = Matrix.matrix u v w x y z f.transform }
libraries/Native/Graphics/Matrix.jsnew file+44
@@ -0,0 +1,44 @@
1+
2+Elm.Native.Graphics.Matrix = function(elm) {
3+ "use strict";
4+
5+ elm.Native = elm.Native || {};
6+ elm.Native.Graphics = elm.Native.Graphics || {};
7+ if (elm.Native.Graphics.Matrix) return elm.Native.Graphics.Matrix;
8+
9+ try { Float32Array; } catch(e) { Float32Array = Array; }
10+ var A = Float32Array;
11+
12+ var identity = new A([1,0,0,0,1,0]);
13+
14+ function rotate(t,m) {
15+ var c = Math.cos(t);
16+ var s = Math.sin(t);
17+ var m0 = m[0], m1 = m[1], m3 = m[3], m4 = m[4];
18+ return new A([m0*c + m1*-s, m0*s + m1*c, m[2],
19+ m3*c + m4*-s, m3*s + m4*c, m[5]]);
20+ }
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]]);
24+ }
25+ function move(x,y,m) {
26+ var m0 = m[0], m1 = m[1], m3 = m[3], m4 = m[4];
27+ return new A([m0, m1, m0*x + m1*y + m[2],
28+ m3, m4, m3*x + m4*y + m[5]]);
29+ }
30+ function matrix(a,b,c,d,e,f,m) {
31+ var m0 = m[0], m1 = m[1], m3 = m[3], m4 = m[4];
32+ return new A([m0*a + m1*d, m0*b + m1*e, m0*c + m1*f + m[2],
33+ m3*a + m4*d, m3*b + m4*e, m3*c + m4*f + m[5]]);
34+ }
35+
36+ return elm.Native.Graphics.Matrix = {
37+ identity:identity,
38+ rotation:F2(rotation),
39+ scale:F3(scale),
40+ move:F3(move),
41+ matrix:F7(matrix)
42+ };
43+
44+};