Mercurial > MadButterfly
annotate nodejs/mbapp.js @ 1397:a19f6cecf3c8
Hide the last frame.
author | wycc |
---|---|
date | Sat, 02 Apr 2011 06:00:25 +0800 |
parents | a5672125e515 |
children | 9cebe429508c |
rev | line source |
---|---|
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
820
diff
changeset
|
1 // -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 4; -*- |
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
820
diff
changeset
|
2 // vim: sw=4:ts=8:sts=4 |
716 | 3 var mbfly = require("mbfly"); |
4 var svg = require("./svg"); | |
730 | 5 var sys = require("sys"); |
716 | 6 var ldr = mbfly.img_ldr_new("."); |
784
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
7 |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
8 function _reverse(m1) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
9 var rev = new Array(1, 0, 0, 0, 1, 0); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
10 var m = new Array(m1[0], m1[1], m1[2], m1[3], m1[4], m1[5]); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
11 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
12 rev[3] = -m[3] / m[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
13 m[3] = 0; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
14 m[4] += rev[3] * m[1]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
15 m[5] += rev[3] * m[2]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
16 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
17 rev[1] = -m[1] / m[4]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
18 rev[0] += rev[1] * rev[3]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
19 m[1] = 0; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
20 m[2] += rev[1] * m[5]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
21 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
22 rev[2] = -m[2]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
23 rev[5] = -m[5]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
24 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
25 rev[0] = rev[0] / m[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
26 rev[1] = rev[1] / m[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
27 rev[2] = rev[2] / m[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
28 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
29 rev[3] = rev[3] / m[4]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
30 rev[4] = rev[4] / m[4]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
31 rev[5] = rev[5] / m[4]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
32 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
33 return rev; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
34 } |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
35 |
853
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
36 function _decorate_mb_rt(mb_rt) { |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
37 var coord; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
38 |
853
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
39 mb_rt._mbapp_saved_coord_new = mb_rt.coord_new; |
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
40 mb_rt.coord_new = function(parent) { |
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
41 var coord; |
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
42 |
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
43 coord = this._mbapp_saved_coord_new(parent); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
44 coord.type = "coord"; |
884
6c8e4e1f3a39
Maintain a list of children
Thinker K.F. Li <thinker@codemud.net>
parents:
874
diff
changeset
|
45 coord.children = []; |
853
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
46 coord._mbapp_saved_mtx = [coord[0], coord[1], coord[2], |
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
47 coord[3], coord[4], coord[5]]; |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
48 coord._mbapp_saved_rev_mtx = _reverse(coord._mbapp_saved_mtx); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
49 coord.parent = parent; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
50 coord._mbapp_saved_add_shape = coord.add_shape; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
51 coord.add_shape = function(shape) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
52 var coord; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
53 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
54 this._mbapp_saved_add_shape(shape); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
55 shape.parent = this; |
884
6c8e4e1f3a39
Maintain a list of children
Thinker K.F. Li <thinker@codemud.net>
parents:
874
diff
changeset
|
56 this.children.push(shape); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
57 } |
884
6c8e4e1f3a39
Maintain a list of children
Thinker K.F. Li <thinker@codemud.net>
parents:
874
diff
changeset
|
58 |
6c8e4e1f3a39
Maintain a list of children
Thinker K.F. Li <thinker@codemud.net>
parents:
874
diff
changeset
|
59 parent.children.push(coord); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
60 |
853
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
61 return coord; |
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
62 }; |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
63 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
64 /* |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
65 * Decorate root coord |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
66 */ |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
67 coord = mb_rt.root; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
68 coord.type = "coord"; |
884
6c8e4e1f3a39
Maintain a list of children
Thinker K.F. Li <thinker@codemud.net>
parents:
874
diff
changeset
|
69 coord.children = []; |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
70 coord._mbapp_saved_mtx = [coord[0], coord[1], coord[2], |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
71 coord[3], coord[4], coord[5]]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
72 coord._mbapp_saved_rev_mtx = _reverse(coord._mbapp_saved_mtx); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
73 coord._mbapp_saved_add_shape = coord.add_shape; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
74 coord.add_shape = function(shape) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
75 var coord; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
76 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
77 this._mbapp_saved_add_shape(shape); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
78 shape.parent = this; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
79 } |
853
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
80 } |
784
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
81 |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
82 app=function(display, w, h) { |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
83 var self = this; |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
84 var mb_rt; |
716 | 85 |
784
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
86 if(typeof display == "undefined") |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
87 display = ":0.0"; |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
88 if(typeof w == "undefined") |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
89 w = 720; |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
90 if(typeof h == "undefined") |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
91 h = 480; |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
92 |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
93 mb_rt = this.mb_rt = new mbfly.mb_rt(display, w, h); |
853
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
94 _decorate_mb_rt(mb_rt); |
784
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
95 var background = mb_rt.rect_new(0, 0, 720, 480, 0, 0); |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
96 var paint = mb_rt.paint_color_new(1, 1, 1, 1); |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
97 paint.fill(background); |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
98 mb_rt.root.add_shape(background); |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
99 |
909 | 100 this.mb_rt.kbevents.add_event_observer(exports.EVT_KB_PRESS, function(evt) { self.KeyPress(evt);}); |
101 this.keymap={}; | |
102 this.onKeyPress = null; | |
914 | 103 this.svg = new svg.loadSVG(this.mb_rt,this.mb_rt.root,null); |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
104 this.frame_interval = 1000/12; // 12 frame per second |
716 | 105 } |
106 app.prototype.loadSVG=function(fname) { | |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
107 this.svg.load(this.mb_rt,this.mb_rt.root,fname); |
1391 | 108 this.changeScene(0); |
1396
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
109 sys.puts("xxxx"); |
716 | 110 } |
111 | |
730 | 112 app.prototype.KeyPress = function(evt) { |
113 if (this.onKeyPress) this.onKeyPress(evt.sym); | |
911 | 114 if (evt.sym in this.keymap) { |
115 this.keymap[evt.sym](); | |
116 } | |
730 | 117 } |
118 | |
716 | 119 app.prototype.loop=function() { |
721
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
120 this.mb_rt.redraw_all(); |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
121 this.mb_rt.flush(); |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
122 } |
762 | 123 app.prototype.update=function() { |
124 this.mb_rt.redraw_all(); | |
125 this.mb_rt.flush(); | |
126 } | |
721
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
127 app.prototype.get=function(name) { |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
128 return this.mb_rt.mbnames[name]; |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
129 } |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
130 app.prototype.addKeyboardListener=function(type,f) { |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
131 return this.mb_rt.kbevents.add_event_observer(type,f); |
716 | 132 } |
724 | 133 app.prototype.refresh=function() { |
886
3457f2d8b0b8
Only redraw changed when calling app.refresh() in JS
Thinker K.F. Li <thinker@codemud.net>
parents:
884
diff
changeset
|
134 this.mb_rt.redraw_changed(); |
724 | 135 this.mb_rt.flush(); |
136 } | |
730 | 137 app.prototype.dump=function() { |
138 sys.puts(this.onKeyPress); | |
139 } | |
140 | |
141 app.prototype.addKeyListener=function(key,f) { | |
731
1719484ed15d
Make the argument key can be an array to register multiple keys.
wycc
parents:
730
diff
changeset
|
142 if (typeof(key) == 'number') |
1719484ed15d
Make the argument key can be an array to register multiple keys.
wycc
parents:
730
diff
changeset
|
143 this.keymap[key] = f; |
911 | 144 else { |
145 for(k in key) { | |
146 this.keymap[k] = f; | |
731
1719484ed15d
Make the argument key can be an array to register multiple keys.
wycc
parents:
730
diff
changeset
|
147 } |
911 | 148 } |
730 | 149 } |
716 | 150 |
1376 | 151 app.prototype.generateScaleTween=function(src,dest,p) { |
1391 | 152 sys.puts("p="+ p); |
1376 | 153 src.hide(); |
154 // Duplicate the group | |
1379 | 155 var nodes = src.node.childNodes(); |
1376 | 156 if (src.dup == null) { |
1396
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
157 var dup = this.mb_rt.coord_new(src.parent); |
1379 | 158 for (i in nodes) { |
1396
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
159 var child_dup = this.mb_rt.coord_new(dup); |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
160 var n = nodes[i]; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
161 var c = n.coord; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
162 var k = child_dup.clone_from_subtree(c); |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
163 n.coord.dup = child_dup; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
164 sys.puts(n); |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
165 sys.puts("c[0] = "+c[0]+" c[1]="+c[1]+" c[2]="+c[2]+" c[3]="+c[3]+" c[4]="+c[4]+" c[5]="+c[5]); |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
166 k[0] = c[0]; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
167 k[1] = c[1]; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
168 k[2] = c[2]; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
169 k[3] = c[3]; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
170 k[4] = c[4]; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
171 k[5] = c[5]; |
1379 | 172 } |
1376 | 173 src.dup = dup; |
174 } else { | |
175 dup = src.dup; | |
1379 | 176 src.dup.show(); |
1376 | 177 } |
1379 | 178 //dup.hide(); |
179 //dest.hide(); | |
180 //sys.puts(dup); | |
1376 | 181 |
1379 | 182 for(i in nodes) { |
183 n= nodes[i]; | |
184 coord = n.coord; | |
185 var attr = n.attr('id'); | |
186 if (attr == null) continue; | |
187 var id = attr.value(); | |
1391 | 188 sys.puts("id="+id); |
1396
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
189 this.generateScaleTweenObject(coord.dup,coord,coord.target,p,id); |
1379 | 190 } |
191 } | |
192 function printcoord(s) | |
193 { | |
194 sys.puts(s[0]+" "+s[1]+" "+s[2]+" "+s[3]+" "+s[4]+" "+s[5]); | |
195 } | |
196 | |
197 function mul(a,b) | |
198 { | |
199 return [a[0]*b[0]+a[1]*b[3], a[0]*b[1]+a[1]*b[4], a[0]*b[2]+a[1]*b[5]+a[2], | |
200 a[3]*b[0]+a[4]*b[3], a[3]*b[1]+a[4]*b[4], a[3]*b[2]+a[4]*b[5]+a[5]]; | |
201 } | |
1376 | 202 |
1396
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
203 app.prototype.generateScaleTweenObject=function(coord,src,dest,p,id) { |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
204 sys.puts(src.node); |
1391 | 205 sys.puts("src=["+src.sx+","+src.sy+","+src.r+","+src.tx+","+src.ty); |
1396
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
206 sys.puts("id="+dest.node.attr('id')+" dest=["+dest.sx+","+dest.sy+","+dest.r+","+dest.tx+","+dest.ty); |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
207 sys.puts("src.center="+src.center); |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
208 sys.puts("src.center.x="+src.center.x+" src.center.y="+src.center.y); |
1392
cd5fb45bc247
Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents:
1391
diff
changeset
|
209 if (src == null) return; |
1379 | 210 var p1 = 1-p; |
1392
cd5fb45bc247
Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents:
1391
diff
changeset
|
211 var x1 = src.center.x; |
cd5fb45bc247
Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents:
1391
diff
changeset
|
212 var y1 = src.center.y; |
1396
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
213 |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
214 // For the svg:use, the transform matrix is the transform of teh svg:use and the elements inside it |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
215 var d,sx,sy,r,tx,ty; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
216 if (dest.isuse) { |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
217 sx = 1+(dest.sx-1)*p1; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
218 sy = 1+(dest.sy-1)*p1; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
219 r = dest.r*p1; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
220 tx = dest.tx*p1; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
221 ty = dest.ty*p1; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
222 } else { |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
223 sx = src.sx*p+dest.sx*p1; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
224 sy = src.sy*p+dest.sy*p1; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
225 r = src.r*p+dest.r*p1; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
226 tx = src.tx*p+dest.tx*p1; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
227 ty = src.ty*p+dest.ty*p1; |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
228 } |
1392
cd5fb45bc247
Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents:
1391
diff
changeset
|
229 var mt = [1, 0, -x1, 0, 1, -y1]; |
1382 | 230 var opacity; |
1379 | 231 var ms; |
1382 | 232 |
1396
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
233 opacity = src.opacity*p1 + dest.opacity*p; |
1382 | 234 coord.opacity = opacity; |
235 | |
1379 | 236 if (r == 0) { |
237 m = mt; | |
238 } else { | |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
239 ms= [Math.cos(r), Math.sin(r),0,-Math.sin(r), Math.cos(r),0]; |
1379 | 240 m = mul(ms,mt); |
1376 | 241 } |
1392
cd5fb45bc247
Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents:
1391
diff
changeset
|
242 sys.puts("x1="+x1); |
cd5fb45bc247
Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents:
1391
diff
changeset
|
243 sys.puts("y1="+y1); |
1379 | 244 m = mul([sx,0,0,0,sy,0],m); |
1392
cd5fb45bc247
Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents:
1391
diff
changeset
|
245 m = mul([1,0,x1,0,1,y1],m); |
1379 | 246 m = mul([1,0,tx,0,1,ty],m); |
1392
cd5fb45bc247
Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents:
1391
diff
changeset
|
247 //m[2] = -m[2]; |
1379 | 248 coord[0] = m[0]; |
249 coord[1] = m[1]; | |
250 coord[2] = m[2]; | |
251 coord[3] = m[3]; | |
252 coord[4] = m[4]; | |
253 coord[5] = m[5]; | |
1396
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
254 sys.puts("id="+id+" src.tx="+src.tx+" src.ty="+src.ty+" tx="+tx+" ty="+ty+" r="+r+" x1="+x1+" y1="+y1+" p="+p+" "+m[0]+","+m[1]+","+m[2]+","+m[3]+","+m[4]+","+m[5]); |
1376 | 255 } |
978 | 256 |
257 app.prototype.changeScene=function(s) { | |
258 var nth; | |
1391 | 259 sys.puts(s); |
260 sys.puts(typeof(s)); | |
978 | 261 if (typeof(s)=='number') { |
262 var i; | |
263 nth = s; | |
264 } else { | |
265 nth = this.svg.getFrameNumber(s); | |
266 if (nth == -1) return; | |
267 } | |
1391 | 268 sys.puts("goto to scene "+nth); |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
269 this.currentScene = nth; |
978 | 270 var scenes = this.svg.scenes; |
1392
cd5fb45bc247
Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents:
1391
diff
changeset
|
271 if (scenes == null) return; |
1376 | 272 for(i=0;i<scenes.length-1;i++) { |
978 | 273 try { |
1397 | 274 this.get(scenes[i].ref).hide(); |
978 | 275 if (nth >=scenes[i].start && nth <=scenes[i].end) { |
1391 | 276 sys.puts("find"); |
1376 | 277 if (scenes[i].type == 'normal' || i == scenes.length-1) { |
278 this.get(scenes[i].ref).show(); | |
279 } else if (scenes[i].type == 'scale') { | |
1391 | 280 sys.puts(i+","+scenes[i+1].start+","+scenes[i].end); |
1376 | 281 if (scenes[i].end == (scenes[i+1].start-1)) { |
1379 | 282 var p = 1-(nth-scenes[i].start)/(scenes[i].end-scenes[i].start+1); |
1376 | 283 this.generateScaleTween(this.get(scenes[i].ref),this.get(scenes[i+1].ref),p); |
284 } else { | |
285 // If there is no second key frame defined, fall back to the normal | |
286 this.get(scenes[i].ref).show(); | |
287 } | |
1379 | 288 this.get(scenes[i+1].ref).hide(); |
1376 | 289 } |
290 | |
978 | 291 } else { |
1391 | 292 sys.puts("hide "+scenes[i].ref); |
978 | 293 this.get(scenes[i].ref).hide(); |
1396
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
294 if (this.get(scenes[i].ref).dup) |
a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
wycc
parents:
1392
diff
changeset
|
295 this.get(scenes[i].ref).dup.hide(); |
978 | 296 } |
297 } catch(e) { | |
298 sys.puts(e); | |
299 sys.puts(scenes[i].ref); | |
300 } | |
301 } | |
1397 | 302 this.get(scenes[i].ref).hide(); |
1379 | 303 this.refresh(); |
978 | 304 } |
1138 | 305 |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
306 app.prototype.runToScene=function(s) { |
1391 | 307 sys.puts(s); |
308 sys.puts(typeof(s)); | |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
309 if (typeof(s)=='number') { |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
310 var i; |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
311 nth = s; |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
312 } else { |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
313 nth = this.svg.getFrameNumber(s); |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
314 if (nth == -1) return; |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
315 } |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
316 var self = this; |
1391 | 317 sys.puts(this.currentScene+","+nth); |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
318 if (nth > this.currentScene) { |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
319 this.targetScene = nth; |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
320 this.startScene = this.currentScene; |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
321 this.starttime = Date.now(); |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
322 setTimeout(function() { |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
323 self.skipFrame() |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
324 }, this.frame_interval); |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
325 } else { |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
326 this.changeScene(nth); |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
327 } |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
328 } |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
329 |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
330 app.prototype.skipFrame=function() { |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
331 var self = this; |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
332 sys.puts("n="+this.currentScene); |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
333 if (this.currentScene != this.targetScene) { |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
334 nextframe = this.startScene + Math.round((Date.now() - this.starttime)/this.frame_interval); |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
335 if (nextframe > this.targetScene) |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
336 nextframe = this.targetScene; |
1391 | 337 sys.puts("change to scene "+nextframe); |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
338 this.changeScene(nextframe); |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
339 setTimeout(function() { |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
340 self.skipFrame() |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
341 }, this.frame_interval); |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
342 } |
1138 | 343 } |
344 | |
978 | 345 app.prototype.addSceneListener=function(n, cb) { |
346 sys.puts("This is not implemented yet") | |
347 } | |
348 | |
872
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
349 var app_with_win = function(display, win) { |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
350 var self = this; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
351 var mb_rt; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
352 var background; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
353 var paint; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
354 |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
355 if(typeof display == "undefined" || typeof win == "undefined") |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
356 throw "Invalid argument"; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
357 |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
358 mb_rt = this.mb_rt = new mbfly.mb_rt_with_win(display, win); |
874
ec8d7e9c9642
Decorate mb_rt created by mb_rt_with_win()
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
359 _decorate_mb_rt(mb_rt); |
872
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
360 background = mb_rt.rect_new(0, 0, 720, 480, 0, 0); |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
361 paint = mb_rt.paint_color_new(1, 1, 1, 1); |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
362 paint.fill(background); |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
363 mb_rt.root.add_shape(background); |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
364 |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
365 this.mb_rt.kbevents. |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
366 add_event_observer(exports.EVT_KB_PRESS, |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
367 function(evt) { self.KeyPress(evt); }); |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
368 this.keymap = {}; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
369 this.onKeyPress = null; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
370 } |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
371 |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
372 app_with_win.prototype = app.prototype; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
373 |
716 | 374 exports.app=app; |
872
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
375 exports.app_with_win = app_with_win; |
721
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
376 |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
377 // Put all key definition here |
820 | 378 exports.KEY_LEFT = 0xff51; |
729
299ed9319dc6
Use key symbols instead of keycodes.
Thinker K.F. Li <thinker@branda.to>
parents:
724
diff
changeset
|
379 exports.KEY_UP = 0xff52; |
820 | 380 exports.KEY_RIGHT = 0xff53; |
729
299ed9319dc6
Use key symbols instead of keycodes.
Thinker K.F. Li <thinker@branda.to>
parents:
724
diff
changeset
|
381 exports.KEY_DOWN = 0xff54; |
820 | 382 exports.KEY_ENTER = 0xff0d; |
724 | 383 exports.EVT_ANY=0; |
384 exports.EVT_MOUSE_OVER=1; | |
385 exports.EVT_MOUSE_OUT=2; | |
386 exports.EVT_MOUSE_MOVE=3; | |
387 exports.EVT_MOUSE_BUT_PRESS4; | |
388 exports.EVT_MOUSE_BUT_RELEASE=5 | |
389 exports.EVT_KB_PRESS=6; | |
390 exports.EVT_KB_RELEASE=7; | |
391 exports.EVT_PROGM_COMPLETE=8; | |
392 exports.EVT_RDMAN_REDRAW=9; | |
393 exports.EVT_MONITOR_ADD=10; | |
394 exports.EVT_MONITOR_REMOVE=11; | |
395 exports.EVT_MONITOR_FREE=12; | |
396 exports.EVT_MOUSE_MOVE_RAW=13; | |
827 | 397 exports.ldr = ldr; |