Mercurial > MadButterfly
annotate nodejs/mbapp.js @ 1439:c028aa928cc8
Update the API so that we can refresh screen in frame based. This will improve the poerformance of the animation.
author | wycc |
---|---|
date | Mon, 11 Apr 2011 13:05:19 +0800 |
parents | 7f4edd6e175e |
children | 167873cd35c5 |
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("."); |
1408
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
7 var component = require("./component"); |
784
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
8 |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
9 function _reverse(m1) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
10 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
|
11 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
|
12 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
13 rev[3] = -m[3] / m[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
14 m[3] = 0; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
15 m[4] += rev[3] * m[1]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
16 m[5] += rev[3] * m[2]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
17 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
18 rev[1] = -m[1] / m[4]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
19 rev[0] += rev[1] * rev[3]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
20 m[1] = 0; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
21 m[2] += rev[1] * m[5]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
22 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
23 rev[2] = -m[2]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
24 rev[5] = -m[5]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
25 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
26 rev[0] = rev[0] / m[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
27 rev[1] = rev[1] / m[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
28 rev[2] = rev[2] / m[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
29 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
30 rev[3] = rev[3] / m[4]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
31 rev[4] = rev[4] / m[4]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
32 rev[5] = rev[5] / m[4]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
33 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
34 return rev; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
35 } |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
36 |
853
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
37 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
|
38 var coord; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
39 |
853
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
40 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
|
41 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
|
42 var coord; |
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
43 |
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
44 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
|
45 coord.type = "coord"; |
884
6c8e4e1f3a39
Maintain a list of children
Thinker K.F. Li <thinker@codemud.net>
parents:
874
diff
changeset
|
46 coord.children = []; |
853
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
47 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
|
48 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
|
49 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
|
50 coord.parent = parent; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
51 coord._mbapp_saved_add_shape = coord.add_shape; |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
52 coord._mbapp_saved_clone_from_subtree = coord.clone_from_subtree; |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
53 coord.add_shape = function(shape) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
54 var coord; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
55 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
56 this._mbapp_saved_add_shape(shape); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
57 shape.parent = this; |
884
6c8e4e1f3a39
Maintain a list of children
Thinker K.F. Li <thinker@codemud.net>
parents:
874
diff
changeset
|
58 this.children.push(shape); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
59 } |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
60 coord.clone_from_subtree = function(c) { |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
61 var newcoord = this._mbapp_saved_clone_from_subtree(c); |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
62 newcoord.parent = this; |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
63 this.children.push(newcoord); |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
64 // FIXME: This is incorrect. However, we have no way to fix it for now. |
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
65 // We need to implement a function which can get coord for a coord_t. |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
66 newcoord.children=c.children; |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
67 return newcoord; |
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
68 } |
884
6c8e4e1f3a39
Maintain a list of children
Thinker K.F. Li <thinker@codemud.net>
parents:
874
diff
changeset
|
69 |
6c8e4e1f3a39
Maintain a list of children
Thinker K.F. Li <thinker@codemud.net>
parents:
874
diff
changeset
|
70 parent.children.push(coord); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
71 |
853
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
72 return coord; |
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
73 }; |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
74 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
75 /* |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
76 * Decorate root coord |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
77 */ |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
78 coord = mb_rt.root; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
79 coord.type = "coord"; |
884
6c8e4e1f3a39
Maintain a list of children
Thinker K.F. Li <thinker@codemud.net>
parents:
874
diff
changeset
|
80 coord.children = []; |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
81 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
|
82 coord[3], coord[4], coord[5]]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
83 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
|
84 coord._mbapp_saved_add_shape = coord.add_shape; |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
85 coord._mbapp_saved_clone_from_subtree = coord.clone_from_subtree; |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
86 coord.add_shape = function(shape) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
87 var coord; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
88 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
89 this._mbapp_saved_add_shape(shape); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
90 shape.parent = this; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
853
diff
changeset
|
91 } |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
92 coord.clone_from_subtree = function(c) { |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
93 var newcoord; |
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
94 |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
95 newcoord = this._mbapp_saved_clone_from_subtree(c); |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
96 newcoord.parent = this; |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
97 this.children.push(newcoord); |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
98 // FIXME: This is incorrect. However, we have no way to fix it for now. |
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
99 // We need to implement a function which can get coord for a coord_t. |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
100 newcoord.children=c.children; |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
101 return newcoord; |
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
102 } |
853
13e0953c3fb3
backup transform matrix when create a new coord
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
103 } |
784
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
104 |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
105 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
|
106 var self = this; |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
107 var mb_rt; |
716 | 108 |
784
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
109 if(typeof display == "undefined") |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
110 display = ":0.0"; |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
111 if(typeof w == "undefined") |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
112 w = 720; |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
113 if(typeof h == "undefined") |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
114 h = 480; |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
115 |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
116 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
|
117 _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
|
118 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
|
119 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
|
120 paint.fill(background); |
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
762
diff
changeset
|
121 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
|
122 |
909 | 123 this.mb_rt.kbevents.add_event_observer(exports.EVT_KB_PRESS, function(evt) { self.KeyPress(evt);}); |
124 this.keymap={}; | |
125 this.onKeyPress = null; | |
914 | 126 this.svg = new svg.loadSVG(this.mb_rt,this.mb_rt.root,null); |
1426
5487aaf6f863
Change the algorithm to determine the gap between frames so that the go back can be calculated correctly.
wycc
parents:
1424
diff
changeset
|
127 this.frame_interval = 1000/12; // 12 frame per second |
1402 | 128 this.timer = null; |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
129 this._time = Date.now(); |
1408
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
130 this._componentmanager = new component.ComponentManager(this); |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
131 } |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
132 |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
133 app.prototype.ts=function(m) { |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
134 var now = Date.now(); |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
135 var t = now-this._time; |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
136 sys.puts("["+t+"] "+m); |
716 | 137 } |
138 app.prototype.loadSVG=function(fname) { | |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
139 this.svg.load(this.mb_rt,this.mb_rt.root,fname); |
1391 | 140 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
|
141 sys.puts("xxxx"); |
716 | 142 } |
143 | |
730 | 144 app.prototype.KeyPress = function(evt) { |
145 if (this.onKeyPress) this.onKeyPress(evt.sym); | |
911 | 146 if (evt.sym in this.keymap) { |
147 this.keymap[evt.sym](); | |
148 } | |
730 | 149 } |
150 | |
716 | 151 app.prototype.loop=function() { |
721
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
152 this.mb_rt.redraw_all(); |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
153 this.mb_rt.flush(); |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
154 } |
762 | 155 app.prototype.update=function() { |
156 this.mb_rt.redraw_all(); | |
157 this.mb_rt.flush(); | |
158 } | |
1408
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
159 |
721
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
160 app.prototype.get=function(name) { |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
161 return this.mb_rt.mbnames[name]; |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
162 } |
1408
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
163 |
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
164 |
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
165 app.prototype.getComponent=function(name) { |
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
166 var comp = new component.Component(this,name); |
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
167 this._componentmanager.dump(); |
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
168 comp.realize(); |
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
169 sys.puts("Search for "+name); |
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
170 var obj = comp.toCoord(); |
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
171 sys.puts("obj="+obj+" id="+obj.id+" refid="+obj.refid); |
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
172 return comp; |
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
173 } |
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
174 |
721
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
175 app.prototype.addKeyboardListener=function(type,f) { |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
176 return this.mb_rt.kbevents.add_event_observer(type,f); |
716 | 177 } |
724 | 178 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
|
179 this.mb_rt.redraw_changed(); |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
180 //this.mb_rt.redraw_all(); |
724 | 181 this.mb_rt.flush(); |
182 } | |
730 | 183 app.prototype.dump=function() { |
184 sys.puts(this.onKeyPress); | |
185 } | |
186 | |
187 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
|
188 if (typeof(key) == 'number') |
1719484ed15d
Make the argument key can be an array to register multiple keys.
wycc
parents:
730
diff
changeset
|
189 this.keymap[key] = f; |
911 | 190 else { |
191 for(k in key) { | |
192 this.keymap[k] = f; | |
731
1719484ed15d
Make the argument key can be an array to register multiple keys.
wycc
parents:
730
diff
changeset
|
193 } |
911 | 194 } |
730 | 195 } |
716 | 196 |
1376 | 197 app.prototype.generateScaleTween=function(src,dest,p) { |
1391 | 198 sys.puts("p="+ p); |
1376 | 199 src.hide(); |
200 // Duplicate the group | |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
201 var nodes = src.children; |
1424 | 202 //if (src.dup) { |
203 // src.dup.remove(); | |
204 // src.dup = null; | |
205 //} | |
1376 | 206 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
|
207 var dup = this.mb_rt.coord_new(src.parent); |
1379 | 208 for (i in nodes) { |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
209 var c = nodes[i]; |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
210 var k = dup.clone_from_subtree(c); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
211 c.dup = k; |
1408
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
212 c.dup.id = c.id; |
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
213 c.dup.refid = c.refid; |
1436
a9e96291ef0b
Clone the javascrip properties of the object return by clone_from_subtree. This should be relocated to the javascript version of the clone_from_subtree in the future.
wycc
parents:
1426
diff
changeset
|
214 // The following code should be relocated to the javascript wrapper |
a9e96291ef0b
Clone the javascrip properties of the object return by clone_from_subtree. This should be relocated to the javascript version of the clone_from_subtree in the future.
wycc
parents:
1426
diff
changeset
|
215 // the clone_from_subtree in the future. |
a9e96291ef0b
Clone the javascrip properties of the object return by clone_from_subtree. This should be relocated to the javascript version of the clone_from_subtree in the future.
wycc
parents:
1426
diff
changeset
|
216 try { |
a9e96291ef0b
Clone the javascrip properties of the object return by clone_from_subtree. This should be relocated to the javascript version of the clone_from_subtree in the future.
wycc
parents:
1426
diff
changeset
|
217 k.bbox = c.bbox; |
a9e96291ef0b
Clone the javascrip properties of the object return by clone_from_subtree. This should be relocated to the javascript version of the clone_from_subtree in the future.
wycc
parents:
1426
diff
changeset
|
218 k.bbox.owner = k; |
a9e96291ef0b
Clone the javascrip properties of the object return by clone_from_subtree. This should be relocated to the javascript version of the clone_from_subtree in the future.
wycc
parents:
1426
diff
changeset
|
219 } catch(e) { |
a9e96291ef0b
Clone the javascrip properties of the object return by clone_from_subtree. This should be relocated to the javascript version of the clone_from_subtree in the future.
wycc
parents:
1426
diff
changeset
|
220 } |
a9e96291ef0b
Clone the javascrip properties of the object return by clone_from_subtree. This should be relocated to the javascript version of the clone_from_subtree in the future.
wycc
parents:
1426
diff
changeset
|
221 |
a9e96291ef0b
Clone the javascrip properties of the object return by clone_from_subtree. This should be relocated to the javascript version of the clone_from_subtree in the future.
wycc
parents:
1426
diff
changeset
|
222 try { |
a9e96291ef0b
Clone the javascrip properties of the object return by clone_from_subtree. This should be relocated to the javascript version of the clone_from_subtree in the future.
wycc
parents:
1426
diff
changeset
|
223 k.center = c.center; |
a9e96291ef0b
Clone the javascrip properties of the object return by clone_from_subtree. This should be relocated to the javascript version of the clone_from_subtree in the future.
wycc
parents:
1426
diff
changeset
|
224 k.center.owner = c.owner; |
a9e96291ef0b
Clone the javascrip properties of the object return by clone_from_subtree. This should be relocated to the javascript version of the clone_from_subtree in the future.
wycc
parents:
1426
diff
changeset
|
225 } catch(e) { |
a9e96291ef0b
Clone the javascrip properties of the object return by clone_from_subtree. This should be relocated to the javascript version of the clone_from_subtree in the future.
wycc
parents:
1426
diff
changeset
|
226 } |
1379 | 227 } |
1376 | 228 src.dup = dup; |
229 } else { | |
230 dup = src.dup; | |
1379 | 231 src.dup.show(); |
1376 | 232 } |
1379 | 233 //dup.hide(); |
234 //dest.hide(); | |
235 //sys.puts(dup); | |
1376 | 236 |
1379 | 237 for(i in nodes) { |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
238 coord= nodes[i]; |
1408
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
239 if (coord.target) { |
1437 | 240 this._componentmanager.add(coord,coord.dup); |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
241 this.generateScaleTweenObject(coord.dup,coord,coord.target,p,''); |
1408
c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
wycc
parents:
1405
diff
changeset
|
242 } else { |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
243 sys.puts(coord.id); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
244 sys.puts(coord[0]); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
245 sys.puts(coord[1]); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
246 sys.puts(coord[2]); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
247 sys.puts(coord[3]); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
248 sys.puts(coord[4]); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
249 sys.puts(coord[5]); |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
250 } |
1379 | 251 } |
252 } | |
253 function printcoord(s) | |
254 { | |
255 sys.puts(s[0]+" "+s[1]+" "+s[2]+" "+s[3]+" "+s[4]+" "+s[5]); | |
256 } | |
257 | |
258 function mul(a,b) | |
259 { | |
260 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], | |
261 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]]; | |
262 } | |
1376 | 263 |
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
|
264 app.prototype.generateScaleTweenObject=function(coord,src,dest,p,id) { |
1402 | 265 //sys.puts("xxxxxxx"); |
266 //sys.puts("dest="+dest); | |
267 // sys.puts("src=["+src.sx+","+src.sy+","+src.r+","+src.tx+","+src.ty); | |
268 //sys.puts("id="+id+" dest=["+dest.sx+","+dest.sy+","+dest.r+","+dest.tx+","+dest.ty); | |
269 //sys.puts("src.center="+src.center); | |
270 //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
|
271 if (src == null) return; |
1379 | 272 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
|
273 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
|
274 var y1 = src.center.y; |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
275 var y1 = 0; |
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
276 x1 = 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
|
277 |
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
|
278 // 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
|
279 var d,sx,sy,r,tx,ty; |
1401
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
280 sx = src.sx*p+dest.sx*p1; |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
281 sy = src.sy*p+dest.sy*p1; |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
282 r = src.r*p+dest.r*p1; |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
283 tx = src.tx*p+dest.tx*p1; |
2fc1f54a1a3b
Mainly fix the clone_from_subtree to update the children of the parent node. We need to clearify all related codes in the future to make the logic more clear.
wycc
parents:
1399
diff
changeset
|
284 ty = src.ty*p+dest.ty*p1; |
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
|
285 var mt = [1, 0, -x1, 0, 1, -y1]; |
1382 | 286 var opacity; |
1379 | 287 var ms; |
1382 | 288 |
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
|
289 opacity = src.opacity*p1 + dest.opacity*p; |
1382 | 290 coord.opacity = opacity; |
291 | |
1379 | 292 if (r == 0) { |
293 m = mt; | |
294 } else { | |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
295 ms= [Math.cos(r), Math.sin(r),0,-Math.sin(r), Math.cos(r),0]; |
1379 | 296 m = mul(ms,mt); |
1376 | 297 } |
1379 | 298 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
|
299 m = mul([1,0,x1,0,1,y1],m); |
1379 | 300 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
|
301 //m[2] = -m[2]; |
1379 | 302 coord[0] = m[0]; |
303 coord[1] = m[1]; | |
304 coord[2] = m[2]; | |
305 coord[3] = m[3]; | |
306 coord[4] = m[4]; | |
307 coord[5] = m[5]; | |
1402 | 308 //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 | 309 } |
978 | 310 |
311 app.prototype.changeScene=function(s) { | |
312 var nth; | |
1391 | 313 sys.puts(s); |
314 sys.puts(typeof(s)); | |
978 | 315 if (typeof(s)=='number') { |
316 var i; | |
317 nth = s; | |
318 } else { | |
319 nth = this.svg.getFrameNumber(s); | |
320 if (nth == -1) return; | |
321 } | |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
322 this.ts("goto to scene "+nth); |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
323 this.currentScene = nth; |
978 | 324 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
|
325 if (scenes == null) return; |
1376 | 326 for(i=0;i<scenes.length-1;i++) { |
978 | 327 try { |
1397 | 328 this.get(scenes[i].ref).hide(); |
978 | 329 if (nth >=scenes[i].start && nth <=scenes[i].end) { |
1424 | 330 //this.get(scenes[i].ref).show(); |
1399
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
331 if (this.get(scenes[i].ref).dup) |
9cebe429508c
Override the clone_from_subtree to setup the parent and children for the coord object. However, the current children is incorrect since we can not copy it from the origin tree. Instead, we need to get coord_t from the cloned group and then modify all coord objects to include correct parent, children, add_shape and clone_from_subtree.
wycc
parents:
1397
diff
changeset
|
332 this.get(scenes[i].ref).dup.show(); |
1376 | 333 if (scenes[i].type == 'normal' || i == scenes.length-1) { |
334 this.get(scenes[i].ref).show(); | |
335 } else if (scenes[i].type == 'scale') { | |
336 if (scenes[i].end == (scenes[i+1].start-1)) { | |
1379 | 337 var p = 1-(nth-scenes[i].start)/(scenes[i].end-scenes[i].start+1); |
1376 | 338 this.generateScaleTween(this.get(scenes[i].ref),this.get(scenes[i+1].ref),p); |
339 } else { | |
340 // If there is no second key frame defined, fall back to the normal | |
341 this.get(scenes[i].ref).show(); | |
342 } | |
1424 | 343 //this.get(scenes[i+1].ref).hide(); |
1376 | 344 } |
345 | |
978 | 346 } else { |
347 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
|
348 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
|
349 this.get(scenes[i].ref).dup.hide(); |
978 | 350 } |
351 } catch(e) { | |
352 sys.puts(e); | |
353 sys.puts(scenes[i].ref); | |
354 } | |
355 } | |
1397 | 356 this.get(scenes[i].ref).hide(); |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
357 this.ts("refresh"); |
1379 | 358 this.refresh(); |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
359 this.ts("refresh done"); |
978 | 360 } |
1138 | 361 |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
362 app.prototype.runToScene=function(s) { |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
363 if (typeof(s)=='number') { |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
364 var i; |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
365 nth = s; |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
366 } else { |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
367 nth = this.svg.getFrameNumber(s); |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
368 if (nth == -1) return; |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
369 } |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
370 var self = this; |
1391 | 371 sys.puts(this.currentScene+","+nth); |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
372 if (nth > this.currentScene) { |
1402 | 373 this.skipdir = 1; |
374 } else { | |
375 this.skipdir = -1; | |
376 } | |
377 this.targetScene = nth; | |
378 this.startScene = this.currentScene; | |
379 this.starttime = Date.now(); | |
380 if (this.timer == null) { | |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
381 this.skipFrame(); |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
382 } |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
383 } |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
384 |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
385 app.prototype.skipFrame=function() { |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
386 var self = this; |
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
387 if (this.currentScene != this.targetScene) { |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
388 var now = Date.now(); |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
389 var step = Math.round((now - this.starttime)/this.frame_interval)*this.skipdir; |
1402 | 390 nextframe = this.startScene + step |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
391 //nextframe = this.currentScene + this.skipdir; |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
392 this.ts("goto begin"); |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
393 |
1402 | 394 if (this.skipdir>0) { |
395 if (nextframe > this.targetScene) | |
396 nextframe = this.targetScene; | |
397 } else { | |
398 if (nextframe < this.targetScene) | |
399 nextframe = this.targetScene; | |
400 } | |
1426
5487aaf6f863
Change the algorithm to determine the gap between frames so that the go back can be calculated correctly.
wycc
parents:
1424
diff
changeset
|
401 this.changeScene(nextframe); |
1402 | 402 if (nextframe != this.targetScene) { |
1426
5487aaf6f863
Change the algorithm to determine the gap between frames so that the go back can be calculated correctly.
wycc
parents:
1424
diff
changeset
|
403 var timegap = this.frame_interval - (Date.now()-now); |
5487aaf6f863
Change the algorithm to determine the gap between frames so that the go back can be calculated correctly.
wycc
parents:
1424
diff
changeset
|
404 if (timegap < 0) timegap = 0; |
5487aaf6f863
Change the algorithm to determine the gap between frames so that the go back can be calculated correctly.
wycc
parents:
1424
diff
changeset
|
405 |
1402 | 406 this.timer = setTimeout(function() { |
407 self.skipFrame() | |
1426
5487aaf6f863
Change the algorithm to determine the gap between frames so that the go back can be calculated correctly.
wycc
parents:
1424
diff
changeset
|
408 }, timegap ); |
1402 | 409 } else { |
410 this.timer = null; | |
411 } | |
1405
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
412 now = Date.now(); |
05e8d3ffa703
Change the changeScene to sleep less when the render speed is too slow.
wycc
parents:
1402
diff
changeset
|
413 this.ts("goto end"); |
1380
76d2aad5da35
Implement runToScene method for the Flash-like animation.
wycc
parents:
1379
diff
changeset
|
414 } |
1138 | 415 } |
416 | |
978 | 417 app.prototype.addSceneListener=function(n, cb) { |
418 sys.puts("This is not implemented yet") | |
419 } | |
420 | |
872
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
421 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
|
422 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
|
423 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
|
424 var background; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
425 var paint; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
426 |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
427 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
|
428 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
|
429 |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
430 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
|
431 _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
|
432 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
|
433 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
|
434 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
|
435 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
|
436 |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
437 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
|
438 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
|
439 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
|
440 this.keymap = {}; |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
441 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
|
442 } |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
443 |
bcc63b20d5c6
mbapp.js support to create an application with existed window
Thinker K.F. Li <thinker@codemud.net>
parents:
827
diff
changeset
|
444 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
|
445 |
716 | 446 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
|
447 exports.app_with_win = app_with_win; |
721
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
448 |
01d02382dea7
Refactory the mbapp and testsvg to use keyboard events
wycc
parents:
716
diff
changeset
|
449 // Put all key definition here |
820 | 450 exports.KEY_LEFT = 0xff51; |
729
299ed9319dc6
Use key symbols instead of keycodes.
Thinker K.F. Li <thinker@branda.to>
parents:
724
diff
changeset
|
451 exports.KEY_UP = 0xff52; |
820 | 452 exports.KEY_RIGHT = 0xff53; |
729
299ed9319dc6
Use key symbols instead of keycodes.
Thinker K.F. Li <thinker@branda.to>
parents:
724
diff
changeset
|
453 exports.KEY_DOWN = 0xff54; |
820 | 454 exports.KEY_ENTER = 0xff0d; |
724 | 455 exports.EVT_ANY=0; |
456 exports.EVT_MOUSE_OVER=1; | |
457 exports.EVT_MOUSE_OUT=2; | |
458 exports.EVT_MOUSE_MOVE=3; | |
459 exports.EVT_MOUSE_BUT_PRESS4; | |
460 exports.EVT_MOUSE_BUT_RELEASE=5 | |
461 exports.EVT_KB_PRESS=6; | |
462 exports.EVT_KB_RELEASE=7; | |
463 exports.EVT_PROGM_COMPLETE=8; | |
464 exports.EVT_RDMAN_REDRAW=9; | |
465 exports.EVT_MONITOR_ADD=10; | |
466 exports.EVT_MONITOR_REMOVE=11; | |
467 exports.EVT_MONITOR_FREE=12; | |
468 exports.EVT_MOUSE_MOVE_RAW=13; | |
827 | 469 exports.ldr = ldr; |