annotate nodejs/svg.js @ 1513:5d4c7ec05bcd

Add comments
author Thinker K.F. Li <thinker@codemud.net>
date Tue, 10 May 2011 23:43:12 +0800
parents 167873cd35c5
children
rev   line source
807
5723e5446b7c Fix incorrect variable name
Thinker K.F. Li <thinker@codemud.net>
parents: 802
diff changeset
1 // -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 4; -*-
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
2 // vim: sw=4:ts=8:sts=4
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
3 var libxml = require('libxmljs');
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
4 var sys=require('sys');
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
5 var mbfly = require("mbfly");
646
3a1e80de44ff Add image support
wycc
parents: 632
diff changeset
6 var ldr = mbfly.img_ldr_new(".");
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
7
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
8
713
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
9 var _std_colors = {
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
10 "white": [1, 1, 1],
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
11 "black": [0, 0, 0],
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
12 "red": [1, 0, 0]
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
13 };
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
14
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
15 function parse_color(color) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
16 var r, g, b;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
17 var c;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
18
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
19 if (color[0] == "#") {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
20 r = parseInt(color.substring(1, 3), 16) / 255;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
21 g = parseInt(color.substring(3, 5), 16) / 255;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
22 b = parseInt(color.substring(5, 7), 16) / 255;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
23 } else if(_std_colors[color]) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
24 c = _std_colors[color];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
25 r = c[0];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
26 g = c[1];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
27 b = c[2];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
28 } else {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
29 r = g = b = 0;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
30 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
31
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
32 return [r, g, b];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
33 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
34
1390
e6d826db527c Fix the forward refeence issue.
wycc
parents: 1389
diff changeset
35 function loadSVG (mb_rt, root, filename) {
914
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
36 this.pgstack=[];
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
37 if (filename)
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
38 this.load(mb_rt,root,filename);
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
39 }
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
40
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
41 loadSVG.prototype.load=function(mb_rt, root, filename) {
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
42 var doc = libxml.parseXmlFile(filename);
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
43 var _root = doc.root();
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
44 var nodes = _root.childNodes();
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
45 var coord = mb_rt.coord_new(root);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
46 var k;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
47 var accu=[1,0,0,0,1,0];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
48 this.mb_rt = mb_rt;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
49 this.stop_ref={};
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
50 this.gradients={};
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
51 this.radials = {};
1376
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
52 this._groupMap={};
914
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
53 coord.center=new Object();
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
54 coord.center.x = 10000;
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
55 coord.center.y = 10000;
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
56 if (this.pgstack.length > 0)
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
57 this.pgstack[this.pgstack.length-1].hide();
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
58 this.pgstack.push(coord);
1400
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
59 this.mb_rt.mbnames={};
914
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
60
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
61
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
62 if(_root.attr("width")) {
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
63 k = _root.attr("width").value();
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
64 this.width = parseFloat(k);
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
65 }
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
66 if(_root.attr("height")) {
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
67 k = _root.attr("height").value();
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
68 this.height = parseFloat(k);
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
69 }
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
70
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
71 for(k in nodes) {
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
72 var n = nodes[k].name();
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
73 if (n == "defs") {
914
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
74 this.parseDefs(coord,nodes[k]);
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
75 } else if (n == "metadata") {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
76 this.parseMetadata(coord,nodes[k]);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
77 } else if (n == "g") {
914
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
78 this.parseGroup(accu,coord,'root_coord',nodes[k]);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
79 }
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
80 }
1435
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
81
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
82 this.sortScene();
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
83 }
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
84
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
85
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
86
1435
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
87 loadSVG.prototype.sortScene=function()
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
88 {
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
89 for(i=0;i<this.scenes.length;i++) {
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
90 sys.puts(this._groupMap[this.scenes[i].ref]);
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
91 sys.puts(this._groupMap[this.scenes[i].ref].layer);
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
92 this.scenes[i].layer = this._groupMap[this.scenes[i].ref].layer;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
93 }
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
94 this.scenes.sort(function(a,b) {
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
95 if (a.layer > b.layer) return 1;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
96 if (a.layer < b.layer) return -1;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
97 if (a.start > b.start) return 1;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
98 if (a.start < b.start) return -1;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
99 return 0;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
100 });
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
101 sys.puts("scenes");
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
102 for(i=0;i<this.scenes.length;i++) {
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
103 var s = this.scenes[i];
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
104 sys.puts(s.layer+": start="+s.start+" end="+s.end+" ref="+s.ref);
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
105 }
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
106
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
107 }
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
108
914
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
109 loadSVG.prototype.leaveSVG=function()
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
110 {
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
111 var p = this.pgstack.pop();
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
112 p.hide();
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
113 if (this.pgstack.length > 0)
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
114 this.pgstack[this.pgstack.length-1].show();
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
115 }
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
116
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
117 function make_mbnames(mb_rt, n, obj) {
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
118 var mbname;
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
119 var name;
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
120
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
121 if(!mb_rt.mbnames)
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
122 mb_rt.mbnames = {};
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
123
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
124 mbname = n.attr("mbname");
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
125 if(mbname) {
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
126 name = mbname.value();
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
127 mb_rt.mbnames[name] = obj;
928
35b6a9411e26 Use inkscape:label to be the same way as the mbname. In this way, we can use the property editor to define name of the object.
wycc
parents: 914
diff changeset
128 }
35b6a9411e26 Use inkscape:label to be the same way as the mbname. In this way, we can use the property editor to define name of the object.
wycc
parents: 914
diff changeset
129 mbname = n.attr("label");
35b6a9411e26 Use inkscape:label to be the same way as the mbname. In this way, we can use the property editor to define name of the object.
wycc
parents: 914
diff changeset
130 if(mbname&&(mbname.value()!="")) {
35b6a9411e26 Use inkscape:label to be the same way as the mbname. In this way, we can use the property editor to define name of the object.
wycc
parents: 914
diff changeset
131 name = mbname.value();
1435
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
132 sys.puts("defone object "+ name);
928
35b6a9411e26 Use inkscape:label to be the same way as the mbname. In this way, we can use the property editor to define name of the object.
wycc
parents: 914
diff changeset
133 mb_rt.mbnames[name] = obj;
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
134 }
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
135 try {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
136 var gname = n.attr('id').value();
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
137 sys.puts("defone object "+ gname);
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
138 mb_rt.mbnames[gname] = obj;
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
139 } catch(e) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
140 }
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
141 }
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
142
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
143 function getInteger(n,name)
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
144 {
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
145 if (n == null) return 0;
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
146 var a = n.attr(name);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
147 if (a==null) return 0;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
148 return parseInt(a.value());
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
149 }
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
150
631
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
151 function parsePointSize(s)
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
152 {
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
153 var fs=0;
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
154 var i;
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
155
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
156 for(i=0;i<s.length;i++) {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
157 if (s[i]<'0' || s[i] > '9') break;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
158 fs = fs*10 + (s[i]-'0');
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
159 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
160 return fs;
631
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
161
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
162 }
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
163
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
164 function parse_style(node) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
165 var style_attr;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
166 var style;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
167 var parts, part;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
168 var kv, key, value;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
169 var content = {};
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
170 var i;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
171
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
172 style_attr = node.attr('style');
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
173 if(!style_attr)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
174 return content;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
175
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
176 style = style_attr.value();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
177 parts = style.split(';');
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
178 for(i = 0; i < parts.length; i++) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
179 part = parts[i].trim();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
180 if(part) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
181 kv = part.split(':');
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
182 key = kv[0].trim();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
183 value = kv[1].trim();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
184 content[key] = value;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
185 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
186 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
187
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
188 return content;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
189 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
190
631
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
191 function parseColor(c)
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
192 {
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
193 if (c[0] == '#') {
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
194 return parseInt(c.substring(1,3),16)<<16 | parseInt(c.substring(3,5),16)<<8 | parseInt(c.substring(5,7),16);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
195 }
631
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
196 }
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
197
631
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
198 function parseTextStyle(style,n)
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
199 {
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
200 var attr;
625
9f2080b68f8e Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents: 624
diff changeset
201 if (n) {
9f2080b68f8e Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents: 624
diff changeset
202 attr = n.attr('style');
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
203 } else {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
204 attr = null;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
205 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
206 if (attr == null) {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
207 return;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
208 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
209 var f = attr.value().split(';');
625
9f2080b68f8e Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents: 624
diff changeset
210
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
211 for(i in f) {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
212 var kv = f[i].split(':');
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
213 if (kv[0] == 'font-size') {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
214 style.fs = parsePointSize(kv[1]);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
215 } else if (kv[0] == "font-style") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
216 } else if (kv[0] == "font-weight") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
217 } else if (kv[0] == "fill") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
218 style.color = parseColor(kv[1]);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
219 } else if (kv[0] == "fill-opacity") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
220 } else if (kv[0] == "stroke-opacity") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
221 } else if (kv[0] == "stroke") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
222 } else if (kv[0] == "stroke-width") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
223 } else if (kv[0] == "stroke-linecap") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
224 } else if (kv[0] == "stroke-linejoin") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
225 } else if (kv[0] == "stroke-lineopacity") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
226 } else if (kv[0] == "font-family") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
227 style.family = kv[1];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
228 } else if (kv[0] == "font-stretch") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
229 } else if (kv[0] == "font-variant") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
230 } else if (kv[0] == "text-anchor") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
231 } else if (kv[0] == "text-align") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
232 } else if (kv[0] == "writing-mode") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
233 } else if (kv[0] == "line-height") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
234 } else {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
235 sys.puts("Unknown style: "+kv[0]);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
236 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
237 }
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
238 }
732
6879aa403306 Add set_text to the coordinate of the coord_t of the text.
wycc
parents: 720
diff changeset
239 function tspan_set_text(text)
6879aa403306 Add set_text to the coordinate of the coord_t of the text.
wycc
parents: 720
diff changeset
240 {
1435
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
241 sys.puts("kkkkk "+text);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
242 this.text.set_text(text);
732
6879aa403306 Add set_text to the coordinate of the coord_t of the text.
wycc
parents: 720
diff changeset
243 }
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
244
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
245 function _parse_font_size(fn_sz_str) {
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
246 var pos;
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
247
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
248 pos = fn_sz_str.search("px");
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
249 if(pos >= 0)
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
250 fn_sz_str = fn_sz_str.substring(0, pos);
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
251 pos = fn_sz_str.search("pt");
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
252 if(pos >= 0)
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
253 fn_sz_str = fn_sz_str.substring(0, pos);
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
254
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
255 return parseFloat(fn_sz_str);
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
256 }
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
257
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
258 loadSVG.prototype.parseTSpan = function(coord, n, pstyle) {
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
259 var x = getInteger(n,'x');
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
260 var y = getInteger(n,'y');
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
261 var tcoord = this.mb_rt.coord_new(coord);
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
262 var style;
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
263 var family = "Courier";
902
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
264 var weight = 80;
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
265 var slant = 0;
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
266 var sz = 10;
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
267 var face;
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
268 var k;
1435
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
269 if (x == 0) x = coord.text_x;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
270 if (y == 0) y = coord.text_y;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
271 var obj = this.mb_rt.stext_new(n.text().trim(),x,y);
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
272 sys.puts("get text "+n.text().trim() +"at "+x+","+y);
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
273
1435
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
274 tcoord.node = n;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
275 n.coord = tcoord;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
276 this._check_duplicate_src(n,tcoord);
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
277 style = parse_style(n);
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
278 for(k in pstyle) {
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
279 if(k in style)
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
280 continue;
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
281 style[k] = pstyle[k];
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
282 }
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
283
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
284 if("font-family" in style)
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
285 family = style["font-family"];
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
286 if("font-size" in style)
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
287 sz = _parse_font_size(style["font-size"]);
902
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
288 if("font-weight" in style) {
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
289 if(style["font-weight"] == "bold")
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
290 weight = 200;
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
291 }
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
292 if("font-style" in style) {
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
293 if(style["font-style"] == "oblique")
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
294 slant = 110;
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
295 }
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
296
902
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
297 face = this.mb_rt.font_face_query(family, slant, weight);
899
ec94dd788332 set style for a text with computed text length
Thinker K.F. Li <thinker@codemud.net>
parents: 891
diff changeset
298 obj.set_style([[n.text().length, face, sz]]);
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
299
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
300 tcoord.add_shape(obj);
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
301 tcoord.set_text = tspan_set_text;
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
302 tcoord.text = obj;
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
303
882
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
304 this._set_paint_style(style, obj);
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
305 this._set_bbox(n, obj);
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
306
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
307 make_mbnames(this.mb_rt, n, tcoord);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
308 };
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
309
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
310 loadSVG.prototype._prepare_paint_color = function(color, alpha) {
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
311 var paint;
713
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
312 var c;
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
313
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
314 if (color[0]=='#') {
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
315 var r,g,b;
717
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
316 r = parseInt(color.substring(1,3),16)/255;
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
317 g = parseInt(color.substring(3,5),16)/255;
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
318 b = parseInt(color.substring(5,7),16)/255;
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
319 paint = this.mb_rt.paint_color_new(r, g, b, alpha);
713
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
320 } else if(_std_colors[color]) {
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
321 c = _std_colors[color];
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
322 paint = this.mb_rt.paint_color_new(c[0], c[1], c[2], alpha);
807
5723e5446b7c Fix incorrect variable name
Thinker K.F. Li <thinker@codemud.net>
parents: 802
diff changeset
323 } else if (color.substring(0,3) == 'url') {
5723e5446b7c Fix incorrect variable name
Thinker K.F. Li <thinker@codemud.net>
parents: 802
diff changeset
324 var id = color.substring(5, color.length-1);
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
325 if(id in this.gradients) {
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
326 var gr = this.gradients[id];
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
327 paint = this.mb_rt.paint_linear_new(gr[0],gr[1],gr[2],gr[3]);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
328 } else {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
329 var radial = this.radials[id];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
330 paint = this.mb_rt.paint_radial_new(radial[0],
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
331 radial[1],
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
332 radial[2]);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
333 }
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
334 paint.set_stops(this.stop_ref[id]);
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
335 } else {
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
336 paint = this.mb_rt.paint_color_new(0,0,0,1);
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
337 }
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
338 return paint;
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
339 };
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
340
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
341 function guessPathBoundingBox(coord,d)
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
342 {
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
343 return;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
344 var items = d.split(' ');
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
345 var len = items.length;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
346 var pair;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
347 var i;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
348 var minx,miny;
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
349
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
350 minx = 10000;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
351 miny = 10000;
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
352
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
353 for(i=0;i<len;i++) {
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
354 var type = items[i].toLowerCase();
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
355 x = minx;y = miny;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
356 switch(type) {
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
357 case 'm':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
358 case 'l':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
359 case 'a':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
360 case 'x':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
361 pair = items[i+1].split(',');
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
362 if (pair.length==2) {
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
363 x = parseFloat(pair[0]);
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
364 y = parseFloat(pair[1]);
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
365 i++;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
366 } else {
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
367 x = parseFloat(items[i+1]);
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
368 y = parseFloat(items[i+2]);
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
369 i+=2;
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
370 }
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
371 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
372 case 'q':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
373 // Implement this latter
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
374 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
375 case 'c':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
376 // Implement this latter
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
377 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
378 case 's':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
379 // Implement this latter
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
380 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
381 case 'h':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
382 x = parseFloat(items[i+1]);
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
383 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
384 case 'v':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
385 y = parseFloat(items[i+1]);
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
386 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
387 default:
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
388 continue;
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
389 }
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
390 if (x < minx) minx = x;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
391 if (y < miny) miny = y;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
392 }
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
393 if (coord.center.x > minx)
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
394 coord.center.x = minx;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
395 if (coord.center.y > miny)
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
396 coord.center.y = miny;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
397 };
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
398
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
399 function _mul(m1, m2) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
400 var res = new Array();
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
401
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
402 res.push(m1[0] * m2[0] + m1[1] * m2[3]);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
403 res.push(m1[0] * m2[1] + m1[1] * m2[4]);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
404 res.push(m1[0] * m2[2] + m1[1] * m2[5] + m1[2]);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
405 res.push(m1[3] * m2[0] + m1[4] * m2[3]);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
406 res.push(m1[3] * m2[1] + m1[4] * m2[4]);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
407 res.push(m1[3] * m2[2] + m1[4] * m2[5] + m1[5]);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
408
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
409 return res;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
410 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
411
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
412 function _pnt_transform(x, y, matrix) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
413 var rx, ry;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
414
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
415 rx = x * matrix[0] + y * matrix[1] + matrix[2];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
416 ry = x * matrix[3] + y * matrix[4] + matrix[5];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
417 return new Array(rx, ry);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
418 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
419
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
420 function _shift_transform(x, y, matrix) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
421 var rx, ry;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
422
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
423 rx = x * matrix[0] + y * matrix[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
424 ry = x * matrix[3] + y * matrix[4];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
425 return new Array(rx, ry);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
426 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
427
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
428 function _transform_bbox(bbox, matrix) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
429 var min_x, min_y, max_x, max_y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
430 var x, y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
431 var pnt;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
432 var pnts = new Array();
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
433 var i;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
434
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
435 pnt = _pnt_transform(bbox.x, bbox.y, matrix);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
436 pnts.push(pnt);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
437 pnt = _pnt_transform(bbox.x + bbox.width, bbox.y, matrix);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
438 pnts.push(pnt);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
439 pnt = _pnt_transform(bbox.x, bbox.y + bbox.height, matrix);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
440 pnts.push(pnt);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
441 pnt = _pnt_transform(bbox.x + bbox.width, bbox.y + bbox.height, matrix);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
442 pnts.push(pnt);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
443
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
444 min_x = max_x = pnts[0][0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
445 min_y = max_y = pnts[0][1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
446 for(i = 1; i < pnts.length; i++) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
447 pnt = pnts[i];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
448 if(pnt[0] < min_x)
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
449 min_x = pnt[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
450 if(pnt[1] < min_y)
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
451 min_y = pnt[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
452 if(pnt[0] > max_x)
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
453 max_x = pnt[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
454 if(pnt[1] > max_y)
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
455 max_y = pnt[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
456 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
457
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
458 bbox.x = min_x;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
459 bbox.y = min_y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
460 bbox.width = max_x - min_x;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
461 bbox.height = max_y - min_y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
462 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
463
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
464 function _reverse(m1) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
465 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: 852
diff changeset
466 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: 852
diff changeset
467
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
468 rev[3] = -m[3] / m[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
469 m[3] = 0;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
470 m[4] += rev[3] * m[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
471 m[5] += rev[3] * m[2];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
472
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
473 rev[1] = -m[1] / m[4];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
474 rev[0] += rev[1] * rev[3];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
475 m[1] = 0;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
476 m[2] += rev[1] * m[5];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
477
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
478 rev[2] = -m[2];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
479 rev[5] = -m[5];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
480
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
481 rev[0] = rev[0] / m[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
482 rev[1] = rev[1] / m[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
483 rev[2] = rev[2] / m[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
484
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
485 rev[3] = rev[3] / m[4];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
486 rev[4] = rev[4] / m[4];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
487 rev[5] = rev[5] / m[4];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
488
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
489 return rev;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
490 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
491
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
492 var _bbox_proto = {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
493 _get_ac_saved_rev: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
494 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
495 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
496
936
a9abcdac0ae5 Fix issue of moving lightbar of testsvg.js.
Thinker K.F. Li <thinker@codemud.net>
parents: 928
diff changeset
497 c = c.parent;
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
498
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
499 mtx = c._mbapp_saved_rev_mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
500 while(c.parent && typeof c.parent != "undefined") {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
501 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
502 mtx = _mul(mtx, c._mbapp_saved_rev_mtx);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
503 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
504
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
505 return mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
506 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
507
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
508 _get_ac_mtx: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
509 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
510 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
511
936
a9abcdac0ae5 Fix issue of moving lightbar of testsvg.js.
Thinker K.F. Li <thinker@codemud.net>
parents: 928
diff changeset
512 c = c.parent;
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
513
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
514 mtx = [c[0], c[1], c[2], c[3], c[4], c[5]];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
515 while(c.parent) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
516 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
517 mtx = _mul(c, mtx);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
518 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
519
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
520 return mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
521 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
522
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
523 _saved_to_current: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
524 var r;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
525
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
526 r = _mul(this._get_ac_mtx(), this._get_ac_saved_rev());
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
527
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
528 return r;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
529 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
530
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
531 /*! \brief Update x, y, width, and height of the bbox.
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
532 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
533 update: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
534 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
535
861
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
536 this.x = this.orig.x;
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
537 this.y = this.orig.y;
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
538 this.width = this.orig.width;
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
539 this.height = this.orig.height;
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
540
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
541 mtx = this._saved_to_current();
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
542 _transform_bbox(this, mtx);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
543 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
544 };
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
545
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
546 var _center_proto = {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
547 _get_ac_saved_rev: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
548 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
549 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
550
936
a9abcdac0ae5 Fix issue of moving lightbar of testsvg.js.
Thinker K.F. Li <thinker@codemud.net>
parents: 928
diff changeset
551 c = c.parent;
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
552
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
553 mtx = c._mbapp_saved_rev_mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
554 while(c.parent && typeof c.parent != "undefined") {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
555 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
556 mtx = _mul(mtx, c._mbapp_saved_rev_mtx);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
557 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
558
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
559 return mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
560 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
561
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
562 _get_ac_mtx: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
563 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
564 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
565
936
a9abcdac0ae5 Fix issue of moving lightbar of testsvg.js.
Thinker K.F. Li <thinker@codemud.net>
parents: 928
diff changeset
566 c = c.parent;
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
567
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
568 mtx = [c[0], c[1], c[2], c[3], c[4], c[5]];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
569 while(c.parent) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
570 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
571 mtx = _mul(c, mtx);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
572 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
573
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
574 return mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
575 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
576
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
577 _get_ac_rev: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
578 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
579 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
580
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
581 if(c.type != "coord")
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
582 c = c.parent; // is a shape!
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
583
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
584 mtx = _reverse([c[0], c[1], c[2], c[3], c[4], c[5]]);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
585 while(c.parent) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
586 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
587 mtx = _mul(mtx, _reverse([c[0], c[1], c[2], c[3], c[4], c[5]]));
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
588 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
589
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
590 return mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
591 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
592
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
593 _saved_to_current: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
594 var r;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
595
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
596 r = _mul(this._get_ac_mtx(), this._get_ac_saved_rev());
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
597
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
598 return r;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
599 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
600
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
601 /*! \brief Update x, y of center point of an object.
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
602 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
603 update: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
604 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
605 var xy;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
606
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
607 mtx = this._saved_to_current();
861
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
608 xy = _pnt_transform(this.orig.x, this.orig.y, mtx);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
609
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
610 this._x = xy[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
611 this._y = xy[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
612 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
613
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
614 /*! \brief Move owner object to make center at (x, y).
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
615 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
616 move: function(x, y) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
617 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
618 var xdiff = x - this._x;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
619 var ydiff = y - this._y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
620 var shiftxy;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
621 var c;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
622
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
623 mtx = this._get_ac_rev();
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
624 shiftxy = _shift_transform(xdiff, ydiff, mtx);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
625
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
626 c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
627 if(c.type != "coord")
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
628 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
629
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
630 c[2] += shiftxy[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
631 c[5] += shiftxy[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
632
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
633 this._x = x;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
634 this._y = y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
635 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
636
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
637 /*! \brief Move owner object to make center at position specified by pnt.
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
638 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
639 move_pnt: function(pnt) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
640 this.move(pnt.x, pnt.y);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
641 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
642
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
643 /*! \brief Prevent user to modify value.
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
644 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
645 get x() { return this._x; },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
646
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
647 /*! \brief Prevent user to modify value.
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
648 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
649 get y() { return this._y; },
857
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
650
936
a9abcdac0ae5 Fix issue of moving lightbar of testsvg.js.
Thinker K.F. Li <thinker@codemud.net>
parents: 928
diff changeset
651 /*! \brief Center position in the relative space defined by parent.
a9abcdac0ae5 Fix issue of moving lightbar of testsvg.js.
Thinker K.F. Li <thinker@codemud.net>
parents: 928
diff changeset
652 */
857
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
653 get rel() {
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
654 var rev;
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
655 var xy;
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
656
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
657 rev = this._get_ac_rev();
861
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
658 xy = _pnt_transform(this.orig.x, this.orig.y, rev);
857
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
659
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
660 return {x: xy[0], y: xy[1]};
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
661 },
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
662 };
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
663
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
664 loadSVG.prototype._set_bbox = function(node, tgt) {
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
665 var a;
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
666 var vstr;
808
9b6c26cf9102 Move bounding box and center back to an object
Thinker K.F. Li <thinker@codemud.net>
parents: 807
diff changeset
667 var bbox, center;
861
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
668 var orig;
1398
6fa4a53c3fca Use clone_from_subtree to generate content for the svg:use.
wycc
parents: 1395
diff changeset
669
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
670 a = node.attr("bbox-x");
1395
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
671 if(!a) {
1435
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
672 sys.puts("No bbox: "+node);
1395
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
673 tgt.center = new Object();
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
674 tgt.center.x=0;
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
675 tgt.center.y=0;
1435
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
676 tgt.center.rel = new Object();
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
677 tgt.center.rel.x=0;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
678 tgt.center.rel.y=0;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
679 tgt.bbox = new Object();
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
680 tgt.center.__proto__ = _center_proto;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
681 tgt.center.owner = tgt;
842
76fe4afce640 The inkscape:bbox is defined as the global coordinate system. However, the center.x and center.y must be the coordiante system of the parent group of the SVG entity. Therefore, we need to do coordinate transformation from the global coordination system to the local coordination system.
wycc
parents: 830
diff changeset
682 return 0;
1395
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
683 }
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
684
861
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
685 /* bbox.orig is initial values of bbox. The bbox is recomputed
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
686 * according bbox.orig and current matrix. See bbox.update().
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
687 */
808
9b6c26cf9102 Move bounding box and center back to an object
Thinker K.F. Li <thinker@codemud.net>
parents: 807
diff changeset
688 tgt.bbox = bbox = new Object();
861
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
689 bbox.orig = orig = new Object();
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
690 bbox.owner = tgt;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
691 bbox.__proto__ = _bbox_proto;
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
692 vstr = a.value();
861
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
693 orig.x = parseFloat(vstr);
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
694
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
695 a = node.attr("bbox-y");
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
696 vstr = a.value();
861
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
697 orig.y = this.height - parseFloat(vstr);
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
698
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
699 a = node.attr("bbox-width");
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
700 vstr = a.value();
861
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
701 orig.width = parseFloat(vstr);
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
702
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
703 a = node.attr("bbox-height");
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
704 vstr = a.value();
861
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
705 orig.height = parseFloat(vstr);
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
706 orig.y -= orig.height;
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
707
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
708 bbox.update();
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
709
861
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
710 /* center.orig is initial values of center. The center is
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
711 * recomputed according center.orig and current matrix. See
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
712 * center.update().
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
713 */
808
9b6c26cf9102 Move bounding box and center back to an object
Thinker K.F. Li <thinker@codemud.net>
parents: 807
diff changeset
714 tgt.center = center = new Object();
861
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
715 center.orig = orig = new Object();
808
9b6c26cf9102 Move bounding box and center back to an object
Thinker K.F. Li <thinker@codemud.net>
parents: 807
diff changeset
716
861
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
717 orig.x = bbox.orig.width / 2 + bbox.orig.x;
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
718 orig.y = bbox.orig.height / 2 + bbox.orig.y;
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
719 a = node.attr("transform-center-x");
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
720 if(a) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
721 vstr = a.value();
861
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
722 orig.x += parseFloat(vstr);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
723 a = node.attr("transform-center-y");
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
724 vstr = a.value();
861
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
725 orig.y -= parseFloat(vstr);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
726 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
727 center.__proto__ = _center_proto;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
728 center.owner = tgt;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
729 center.update();
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
730
842
76fe4afce640 The inkscape:bbox is defined as the global coordinate system. However, the center.x and center.y must be the coordiante system of the parent group of the SVG entity. Therefore, we need to do coordinate transformation from the global coordination system to the local coordination system.
wycc
parents: 830
diff changeset
731 return 1;
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
732 }
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
733
882
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
734 loadSVG.prototype._set_paint_style = function(style, tgt) {
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
735 var paint;
717
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
736 var fill_alpha = 1;
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
737 var stroke_alpha = 1;
877
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
738 var alpha = 1;
717
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
739 var fill_color;
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
740 var stroke_color;
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
741 var stroke_width = 1;
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
742 var i;
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
743
877
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
744 if(style) {
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
745 if('opacity' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
746 alpha = parseFloat(style['opacity']);
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
747 if('fill' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
748 fill_color = style['fill'];
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
749 if('fill-opacity' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
750 fill_alpha = parseFloat(style['fill-opacity']);
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
751 if('stroke' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
752 stroke_color = style['stroke'];
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
753 if('stroke-width' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
754 stroke_width = parseFloat(style['stroke-width']);
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
755 if('stroke-opacity' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
756 stroke_alpha = parseFloat(style['stroke-opacity']);
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
757 if('display' in style && style['display'] == 'none')
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
758 return;
717
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
759 }
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
760
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
761 if(fill_color) {
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
762 if(fill_color != "none") {
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
763 paint = this._prepare_paint_color(fill_color, fill_alpha);
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
764 paint.fill(tgt);
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
765 }
717
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
766 }
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
767 if(stroke_color) {
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
768 if(stroke_color != "none") {
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
769 paint = this._prepare_paint_color(stroke_color, stroke_alpha);
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
770 paint.stroke(tgt);
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
771 }
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
772 }
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
773
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
774 tgt.stroke_width = stroke_width;
888
143ac14c3ce9 Set opacity for a path.
Thinker K.F. Li <thinker@codemud.net>
parents: 883
diff changeset
775
143ac14c3ce9 Set opacity for a path.
Thinker K.F. Li <thinker@codemud.net>
parents: 883
diff changeset
776 if(alpha < 1)
143ac14c3ce9 Set opacity for a path.
Thinker K.F. Li <thinker@codemud.net>
parents: 883
diff changeset
777 tgt.parent.opacity = alpha;
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
778 };
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
779
882
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
780 loadSVG.prototype._set_paint = function(node, tgt) {
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
781 var style;
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
782
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
783 style = parse_style(node);
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
784 this._set_paint_style(style, tgt);
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
785 };
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
786
880
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
787 function formalize_path_data(d) {
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
788 var posM, posm;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
789 var pos;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
790 var nums = "0123456789+-.";
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
791 var rel = false;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
792 var cmd;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
793
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
794 posM = d.search("M");
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
795 posm = d.search("m");
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
796 pos = posm < posM? posm: posM;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
797 if(pos == -1)
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
798 pos = posM == -1? posm: posM;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
799 if(pos == -1)
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
800 return d;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
801
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
802 if(posm == pos)
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
803 rel = true;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
804
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
805 pos = pos + 1;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
806 while(pos < d.length && " ,".search(d[pos]) >= 0)
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
807 pos++;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
808 while(pos < d.length && nums.search(d[pos]) >= 0)
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
809 pos++;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
810 while(pos < d.length && " ,".search(d[pos]) >= 0)
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
811 pos++;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
812 while(pos < d.length && nums.search(d[pos]) >= 0)
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
813 pos++;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
814 while(pos < d.length && " ,".search(d[pos]) >= 0)
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
815 pos++;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
816 if(nums.search(d[pos]) >= 0) {
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
817 if(rel)
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
818 cmd = "l";
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
819 else
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
820 cmd = "L";
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
821 d = d.substring(0, pos) + cmd + formalize_path_data(d.substring(pos));
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
822 }
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
823 return d;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
824 }
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
825
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
826 loadSVG.prototype.parsePath=function(accu, coord,id, n)
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
827 {
880
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
828 var d = formalize_path_data(n.attr('d').value());
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
829 var style = n.attr('style');
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
830 var path = this.mb_rt.path_new(d);
888
143ac14c3ce9 Set opacity for a path.
Thinker K.F. Li <thinker@codemud.net>
parents: 883
diff changeset
831 var pcoord = this.mb_rt.coord_new(coord);
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
832 pcoord.node = n;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
833 n.coord = pcoord;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
834 this._check_duplicate_src(n,pcoord);
880
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
835
1395
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
836 //guessPathBoundingBox(pcoord,d);
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
837 var trans = n.attr('transform');
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
838 if (trans)
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
839 parseTransform(pcoord,trans.value());
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
840 else {
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
841 pcoord.sx = 1;
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
842 pcoord.sy = 1;
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
843 pcoord.r = 0;
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
844 pcoord.tx = 0;
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
845 pcoord.ty = 0;
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
846 }
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
847
888
143ac14c3ce9 Set opacity for a path.
Thinker K.F. Li <thinker@codemud.net>
parents: 883
diff changeset
848 pcoord.add_shape(path);
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
849 this._set_paint(n, path);
1395
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
850 this._set_bbox(n, pcoord);
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
851
888
143ac14c3ce9 Set opacity for a path.
Thinker K.F. Li <thinker@codemud.net>
parents: 883
diff changeset
852 make_mbnames(this.mb_rt, n, pcoord);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
853 };
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
854
1435
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
855 loadSVG.prototype.parseFlowRegion=function(coord, n,style)
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
856 {
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
857 var nodes = n.childNodes();
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
858
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
859 var k;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
860
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
861 for(k in nodes) {
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
862 var c= nodes[k].name();
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
863 if (c == "rect") {
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
864 // We support rectangle only for now. The x,y,w,h are extrcated and use by the flowPara latter.
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
865 coord.text_x = getInteger(nodes[k],'x');
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
866 coord.text_y = getInteger(nodes[k],'y');
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
867 coord.text_w = getInteger(nodes[k],'width');
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
868 coord.text_h = getInteger(nodes[k],'height');
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
869 }
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
870 }
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
871 }
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
872 loadSVG.prototype.parseFlowRoot=function(accu,coord, id, n) {
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
873 var nodes = n.childNodes();
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
874 var tcoord = this.mb_rt.coord_new(coord);
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
875 var trans = n.attr('transform');
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
876
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
877
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
878
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
879 tcoord.node = n;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
880 n.coord = tcoord;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
881 this._check_duplicate_src(n,tcoord);
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
882
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
883 if (trans)
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
884 parseTransform(tcoord,trans.value());
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
885 else {
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
886 tcoord.sx = 1;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
887 tcoord.sy = 1;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
888 tcoord.r = 0;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
889 tcoord.tx = 0;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
890 tcoord.ty = 0;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
891 }
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
892 style = parse_style(n);
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
893 var nodes = n.childNodes();
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
894 var k;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
895 for(k in nodes) {
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
896 var c= nodes[k].name();
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
897 if (c == "flowRegion") {
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
898 this.parseFlowRegion(tcoord,nodes[k],style);
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
899 } else if (c == "flowPara") {
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
900 this.parseTSpan(tcoord,nodes[k],style);
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
901 } else if (c == "flowDiv") {
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
902 }
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
903 }
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
904 var nx = coord[0]*tcoord.text_x+coord[1]*tcoord.text_y+coord[2];
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
905 if (coord.center.x > nx)
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
906 coord.center.x = nx;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
907 var ny = coord[3]*tcoord.text_x+coord[4]*tcoord.text_y+coord[5];
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
908 if (coord.center.y > ny)
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
909 coord.center.y = ny;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
910 this._set_bbox(n, tcoord);
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
911
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
912 make_mbnames(this.mb_rt, n, tcoord);
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
913 }
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
914
776
77b561bb7929 Implement new algorithm to calculate the origin of the SVG elemnts so that we can implement object resize without changing the position of the object.
wycc
parents: 759
diff changeset
915 loadSVG.prototype.parseText=function(accu,coord,id, n)
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
916 {
1400
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
917 var nodes = n.childNodes();
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
918 if (nodes == "") return;
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
919 var x = getInteger(n,'x');
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
920 var y = getInteger(n,'y');
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
921 var tcoord = this.mb_rt.coord_new(coord);
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
922 var style;
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
923
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
924 tcoord.node = n;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
925 n.coord = tcoord;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
926 this._check_duplicate_src(n,tcoord);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
927
1435
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
928 tcoord.sx = 1;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
929 tcoord.sy = 1;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
930 tcoord.r = 0;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
931 tcoord.tx = 0;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
932 tcoord.ty = 0;
776
77b561bb7929 Implement new algorithm to calculate the origin of the SVG elemnts so that we can implement object resize without changing the position of the object.
wycc
parents: 759
diff changeset
933 if (n.attr('x')) {
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
934 var nx = coord[0]*x+coord[1]*y+coord[2];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
935 if (coord.center.x > nx)
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
936 coord.center.x = nx;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
937 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
938 if (n.attr('y')) {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
939 var ny = coord[3]*x+coord[4]*y+coord[5];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
940 if (coord.center.y > ny)
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
941 coord.center.y = ny;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
942 }
1435
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
943
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
944 style = parse_style(n);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
945 var nodes = n.childNodes();
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
946 var k;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
947 for(k in nodes) {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
948 var c= nodes[k].name();
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
949 if (c == "tspan") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
950 this.parseTSpan(tcoord,nodes[k],style);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
951 } else {
776
77b561bb7929 Implement new algorithm to calculate the origin of the SVG elemnts so that we can implement object resize without changing the position of the object.
wycc
parents: 759
diff changeset
952 }
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
953 }
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
954 this._set_bbox(n, tcoord);
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
955
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
956 make_mbnames(this.mb_rt, n, tcoord);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
957 };
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
958
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
959
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
960 function multiply(s,d) {
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
961 var m=[];
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
962 m[0] = s[0]*d[0]+s[1]*d[3];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
963 m[1] = s[0]*d[1]+s[1]*d[4];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
964 m[2] = s[0]*d[2]+s[1]*d[5]+s[2];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
965 m[3] = s[3]*d[0]+s[4]*d[3];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
966 m[4] = s[3]*d[1]+s[4]*d[4];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
967 m[5] = s[3]*d[2]+s[4]*d[5]+s[5];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
968 s[0] = m[0];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
969 s[1] = m[1];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
970 s[2] = m[2];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
971 s[3] = m[3];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
972 s[4] = m[4];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
973 s[5] = m[5];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
974 };
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
975
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
976 function parseTransform(coord, s)
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
977 {
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
978 var off = s.indexOf('translate');
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
979 if (off != -1) {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
980 var ss = s.substring(off+9);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
981 for(i=0;i<ss.length;i++) {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
982 if (ss[i] == '(') break;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
983 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
984 ss = ss.substring(i+1);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
985 for(i=0;i<ss.length;i++) {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
986 if (ss[i] == ')') {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
987 ss = ss.substring(0,i);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
988 break;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
989 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
990 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
991 var f = ss.split(',');
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
992 var x,y;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
993 x = parseFloat(f[0]);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
994 y = parseFloat(f[1]);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
995 coord[2] += x;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
996 coord[5] += y;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
997 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
998 off = s.indexOf('matrix');
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
999 if (off != -1) {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1000 var end = s.indexOf(')');
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1001 var m = s.substring(7,end);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1002 var fields = m.split(',');
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1003 var newm=[];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1004 newm[0] = parseFloat(fields[0]);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1005 newm[1] = parseFloat(fields[2]);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1006 newm[2] = parseFloat(fields[4]);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1007 newm[3] = parseFloat(fields[1]);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1008 newm[4] = parseFloat(fields[3]);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1009 newm[5] = parseFloat(fields[5]);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1010 multiply(coord,newm);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1011 }
1400
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1012 generateAffineParameters(coord);
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1013 }
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1014 function generateAffineParameters(coord)
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1015 {
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1016 if (coord[0]*coord[4] == coord[1]*coord[3]) {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1017 sys.puts("Singular affine matrix\n");
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1018 coord.sx = 1;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1019 coord.sy = 1;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1020 coord.r = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1021 coord.tx = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1022 coord.ty = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1023 return;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1024 }
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1025 A = coord[0];
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1026 B = coord[3];
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1027 C = coord[1];
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1028 D = coord[4];
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1029 E = coord[2];
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1030 F = coord[5];
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1031 sx = Math.sqrt(A*A+B*B);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1032 A = A / sx;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1033 B = B / sx;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1034 shear = A*C+B*D;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1035 C = C - A*shear;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1036 D = D - B*shear;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1037 sy = Math.sqrt(C*C+D*D);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1038 C = C / sy;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1039 D = D / sy;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1040 r = A*D - B*C;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1041 if (r == -1) {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1042 shear = - shear;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1043 sy = -sy;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1044 }
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1045 R = Math.atan2(-B,A);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1046 coord.sx = sx;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1047 coord.sy = sy;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1048 coord.r = R;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1049 coord.tx = E;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1050 coord.ty = F;
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1051 }
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1052
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
1053 loadSVG.prototype.parseRect=function(accu_matrix,coord, id, n)
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1054 {
703
3457519e3b9c Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents: 647
diff changeset
1055 var x = getInteger(n,'x');
3457519e3b9c Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents: 647
diff changeset
1056 var y = getInteger(n,'y');
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1057 var rx,ry;
703
3457519e3b9c Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents: 647
diff changeset
1058 var w = getInteger(n,'width');
3457519e3b9c Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents: 647
diff changeset
1059 var h = getInteger(n,'height');
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1060 var trans = n.attr('transform');
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1061 var paint;
776
77b561bb7929 Implement new algorithm to calculate the origin of the SVG elemnts so that we can implement object resize without changing the position of the object.
wycc
parents: 759
diff changeset
1062 var tcoord = this.mb_rt.coord_new(coord);
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1063 tcoord.node = n;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1064 n.coord = tcoord;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1065 this._check_duplicate_src(n,tcoord);
703
3457519e3b9c Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents: 647
diff changeset
1066
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1067 var style = n.attr('style');
703
3457519e3b9c Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents: 647
diff changeset
1068
842
76fe4afce640 The inkscape:bbox is defined as the global coordinate system. However, the center.x and center.y must be the coordiante system of the parent group of the SVG entity. Therefore, we need to do coordinate transformation from the global coordination system to the local coordination system.
wycc
parents: 830
diff changeset
1069 if (trans)
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1070 parseTransform(tcoord,trans.value());
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1071 else {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1072 tcoord.sx = 1;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1073 tcoord.sy = 1;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1074 tcoord.r = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1075 tcoord.tx = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1076 tcoord.ty = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1077 }
1381
9a585df24e52 Consider the width and height attribute for the rect elements. The inkscape will change the width and height directly without using transform when we resize the rectangle.
wycc
parents: 1378
diff changeset
1078
9a585df24e52 Consider the width and height attribute for the rect elements. The inkscape will change the width and height directly without using transform when we resize the rectangle.
wycc
parents: 1378
diff changeset
1079 tcoord.tx += x;
9a585df24e52 Consider the width and height attribute for the rect elements. The inkscape will change the width and height directly without using transform when we resize the rectangle.
wycc
parents: 1378
diff changeset
1080 tcoord.ty += y;
9a585df24e52 Consider the width and height attribute for the rect elements. The inkscape will change the width and height directly without using transform when we resize the rectangle.
wycc
parents: 1378
diff changeset
1081 attr = n.attr('duplicate-src');
9a585df24e52 Consider the width and height attribute for the rect elements. The inkscape will change the width and height directly without using transform when we resize the rectangle.
wycc
parents: 1378
diff changeset
1082 if (attr) {
9a585df24e52 Consider the width and height attribute for the rect elements. The inkscape will change the width and height directly without using transform when we resize the rectangle.
wycc
parents: 1378
diff changeset
1083 var id = attr.value();
1425
13e126941bdd The scribbo may set the duplicated-src to itself. We work around it here. However, we should modify the scribbo to fix it.
wycc
parents: 1408
diff changeset
1084 var src = this.mb_rt.mbnames[id];
13e126941bdd The scribbo may set the duplicated-src to itself. We work around it here. However, we should modify the scribbo to fix it.
wycc
parents: 1408
diff changeset
1085 if (src != null) {
13e126941bdd The scribbo may set the duplicated-src to itself. We work around it here. However, we should modify the scribbo to fix it.
wycc
parents: 1408
diff changeset
1086 var orign = src.node;
13e126941bdd The scribbo may set the duplicated-src to itself. We work around it here. However, we should modify the scribbo to fix it.
wycc
parents: 1408
diff changeset
1087 sys.puts("xxxxxxxxxxxxxx");
1422
6fa411fd9549 Commit merged result
wycc
parents: 1408
diff changeset
1088 var nw = getInteger(orign,'width');
6fa411fd9549 Commit merged result
wycc
parents: 1408
diff changeset
1089 var nh = getInteger(orign,'height');
6fa411fd9549 Commit merged result
wycc
parents: 1408
diff changeset
1090 tcoord.sx *= w/nw;
6fa411fd9549 Commit merged result
wycc
parents: 1408
diff changeset
1091 tcoord.sy *= h/nh;
6fa411fd9549 Commit merged result
wycc
parents: 1408
diff changeset
1092 }
1381
9a585df24e52 Consider the width and height attribute for the rect elements. The inkscape will change the width and height directly without using transform when we resize the rectangle.
wycc
parents: 1378
diff changeset
1093 }
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1094
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1095
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
1096
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1097 var rect = this.mb_rt.rect_new(x,y,w,h,10, 10);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
1098 tcoord.add_shape(rect);
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
1099 this._set_paint(n, rect);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
1100 this._set_bbox(n, tcoord);
788
7ec13634c97d Add holder for animate
Thinker K.F. Li <thinker@codemud.net>
parents: 787
diff changeset
1101
7ec13634c97d Add holder for animate
Thinker K.F. Li <thinker@codemud.net>
parents: 787
diff changeset
1102 make_mbnames(this.mb_rt, n, tcoord);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1103 };
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1104
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1105 // When we parse a group, we need to calculate the origin of the group
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1106 // so that we can resize the group without changing its origin point.
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1107 // This must be done recursively. For text/rect/image, we can get its
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1108 // origin point directly by using the (x,y) and apply their
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1109 // transformation matrix. For group, we need to send the acculumated
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1110 // matrix so that each group can get their origin correctly.
776
77b561bb7929 Implement new algorithm to calculate the origin of the SVG elemnts so that we can implement object resize without changing the position of the object.
wycc
parents: 759
diff changeset
1111 //
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1112 // Each element must be responsible to calculate its absolute origin
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1113 // point and update the origin of its parent.
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1114
810
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1115 function parseGroupStyle(style,n)
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1116 {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1117 var attr;
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1118 if (n) {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1119 attr = n.attr('style');
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1120 } else {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1121 attr = null;
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1122 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1123 if (attr == null) {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1124 return;
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1125 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1126 var f = attr.value().split(';');
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1127
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1128 for(i in f) {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1129 var kv = f[i].split(':');
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1130 if (kv[0] == 'opacity') {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1131 style.opacity = parseFloat(kv[1]);
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1132 } else {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1133 sys.puts("Unknown style: "+kv[0]);
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1134 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1135 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1136 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1137
1376
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1138 loadSVG.prototype.duplicateGroup=function(id,root) {
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1139 n = this._groupMap[id];
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1140 var m = [1,0,0,1,0,0]
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1141 this.parseGroup(m,root,id, n)
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1142 }
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1143
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: 1400
diff changeset
1144 function getName(n)
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: 1400
diff changeset
1145 {
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: 1400
diff changeset
1146 var attr = n.attr('mbname');
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: 1400
diff changeset
1147 var 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: 1400
diff changeset
1148
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: 1400
diff changeset
1149 if (attr) {
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: 1400
diff changeset
1150 name = attr.value();
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: 1400
diff changeset
1151 if (name != '') return 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: 1400
diff changeset
1152 }
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: 1400
diff changeset
1153 attr = n.attr('label');
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: 1400
diff changeset
1154
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: 1400
diff changeset
1155 if (attr) {
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: 1400
diff changeset
1156 name = attr.value();
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: 1400
diff changeset
1157 if (name != '') return 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: 1400
diff changeset
1158 }
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: 1400
diff changeset
1159 attr = n.attr('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: 1400
diff changeset
1160
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: 1400
diff changeset
1161 if (attr) {
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: 1400
diff changeset
1162 name = attr.value();
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: 1400
diff changeset
1163 if (name != '') return 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: 1400
diff changeset
1164 }
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: 1400
diff changeset
1165
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: 1400
diff changeset
1166 return '';
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: 1400
diff changeset
1167
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: 1400
diff changeset
1168 }
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: 1400
diff changeset
1169
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1170 loadSVG.prototype._check_duplicate_src=function(n,coord) {
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: 1400
diff changeset
1171 var id = getName(n);
1400
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1172 if (id) {
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: 1400
diff changeset
1173 coord.id = 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: 1400
diff changeset
1174 coord.refid = id;
1400
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1175 } else {
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1176 coord.id = "NA";
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: 1400
diff changeset
1177 coord.refid ="NA";
1400
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1178 }
1395
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
1179 if (n.name()=="use") {
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
1180 n.coord.isuse = true
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
1181 } else {
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
1182 n.coord.isuse = false;
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
1183 }
1435
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
1184
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
1185 // A workaround, should be removed.
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
1186 var attr = n.attr('saved_id');
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
1187 if (attr) return;
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
1188
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
1189 attr = n.attr('duplicate-src');
1400
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1190 if (attr == null) {
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1191 sys.puts("no duplicated" + n);
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1192 return;
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1193 }
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1194 var id = attr.value();
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1195 try {
1400
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1196 if (this.mb_rt.mbnames[id].target) {
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1197 sys.puts("duplicated");
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1198 }
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1199 this.mb_rt.mbnames[id].target = coord;
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: 1400
diff changeset
1200 coord.refid = this.mb_rt.mbnames[id].id;
1435
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
1201 sys.puts("set the refid of "+id+" to be "+coord.refid);
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1202 } catch(e) {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1203 sys.puts("id "+id+" is not defined");
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1204 }
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1205 }
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1206
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1207 loadSVG.prototype.parseGroup=function(accu_matrix,root, group_id, n) {
1381
9a585df24e52 Consider the width and height attribute for the rect elements. The inkscape will change the width and height directly without using transform when we resize the rectangle.
wycc
parents: 1378
diff changeset
1208 var label = n.attr('label');
9a585df24e52 Consider the width and height attribute for the rect elements. The inkscape will change the width and height directly without using transform when we resize the rectangle.
wycc
parents: 1378
diff changeset
1209 if (label && label.value()=='dup') return;
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1210 var k;
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1211 var nodes = n.childNodes();
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
1212 var coord = this.mb_rt.coord_new(root);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1213 // Parse the transform and style here
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1214 var trans = n.attr('transform');
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1215 var accu=[1,0,0,0,1,0];
810
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1216 var style;
1381
9a585df24e52 Consider the width and height attribute for the rect elements. The inkscape will change the width and height directly without using transform when we resize the rectangle.
wycc
parents: 1378
diff changeset
1217
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1218 n.coord = coord;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1219 coord.node = n;
1435
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
1220 n.layer = root.id;
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1221 this._check_duplicate_src(n,coord);
810
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1222
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
1223 coord.center= new Object();
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1224 coord.center.x = 10000;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1225 coord.center.y = 10000;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1226 if (trans!=null) {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1227 parseTransform(coord, trans.value());
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1228 } else {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1229 coord.sx = 1;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1230 coord.sy = 1;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1231 coord.r = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1232 coord.tx = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1233 coord.ty = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1234 }
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1235 multiply(accu,accu_matrix);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1236 multiply(accu,coord);
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1237
810
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1238 style = {};
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1239 parseGroupStyle(style, n);
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1240 if(style.opacity) {
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1241 sys.puts("opacity=" + style.opacity);
830
2a73ff24c141 Use accessor to replace the method to setup the opacity
wycc
parents: 810
diff changeset
1242 coord.opacity=style.opacity;
810
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1243 }
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1244 for(k in nodes) {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1245 var c = nodes[k].name();
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1246 var attr = nodes[k].attr('id');
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1247 var id;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1248 if (attr) {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1249 id = attr.value();
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1250 }
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1251 if (c == "g") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1252 this.parseGroup(accu,coord, id, nodes[k]);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1253 } else if (c == "path") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1254 this.parsePath(accu,coord, id, nodes[k]);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1255 } else if (c == "text") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1256 this.parseText(accu,coord, id, nodes[k]);
1435
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
1257 } else if (c == "flowRoot") {
b12c513212af A prelimanary support for the SVG 1.2 flowRoot style text support. This is useless unless the region is rectangle.
wycc
parents: 1425
diff changeset
1258 this.parseFlowRoot(accu, coord, id, nodes[k]);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1259 } else if (c == "rect") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1260 this.parseRect(accu_matrix,coord, id, nodes[k]);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1261 } else if (c == "image") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1262 this.parseImage(accu_matrix,coord, id, nodes[k]);
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1263 } else if (c == "use") {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1264 this.parseUse(accu_matrix,coord, id, nodes[k]);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1265 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1266 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1267 if (root.center.x > coord.center.x)
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1268 root.center.x = coord.center.x;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1269 if (root.center.y > coord.center.y)
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1270 root.center.y = coord.center.y;
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
1271
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
1272 this._set_bbox(n, coord);
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1273 // Set the group map only it is not defined before. The group might be
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1274 // redefined by the svg:use tag
1385
2ebb07ee455e Fix the issue that we put the wrong entry for the groupMap for svg:g element.
wycc
parents: 1384
diff changeset
1275 if (this._groupMap[group_id]==undefined)
2ebb07ee455e Fix the issue that we put the wrong entry for the groupMap for svg:g element.
wycc
parents: 1384
diff changeset
1276 this._groupMap[group_id] = n;
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1277
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1278 make_mbnames(this.mb_rt, n, coord);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1279 return coord;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1280 };
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1281
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1282 loadSVG.prototype.parseUse=function(accu_matrix,root, use_id, n) {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1283 var k;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1284 var nodes;
1398
6fa4a53c3fca Use clone_from_subtree to generate content for the svg:use.
wycc
parents: 1395
diff changeset
1285 var coord;
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1286 // Parse the transform and style here
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1287 var trans = n.attr('transform');
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1288 var accu=[1,0,0,0,1,0];
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1289 var style;
1398
6fa4a53c3fca Use clone_from_subtree to generate content for the svg:use.
wycc
parents: 1395
diff changeset
1290 var attr = n.attr('duplicate-src');
6fa4a53c3fca Use clone_from_subtree to generate content for the svg:use.
wycc
parents: 1395
diff changeset
1291 if (attr) {
6fa4a53c3fca Use clone_from_subtree to generate content for the svg:use.
wycc
parents: 1395
diff changeset
1292 var src = this.mb_rt.mbnames[attr.value()];
6fa4a53c3fca Use clone_from_subtree to generate content for the svg:use.
wycc
parents: 1395
diff changeset
1293 coord = root.clone_from_subtree(src);
1400
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1294 coord[0] = src[0];
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1295 coord[1] = src[1];
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1296 coord[2] = src[2];
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1297 coord[3] = src[3];
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1298 coord[4] = src[4];
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1299 coord[5] = src[5];
1398
6fa4a53c3fca Use clone_from_subtree to generate content for the svg:use.
wycc
parents: 1395
diff changeset
1300 } else {
6fa4a53c3fca Use clone_from_subtree to generate content for the svg:use.
wycc
parents: 1395
diff changeset
1301 coord = this.mb_rt.coord_new(root);
6fa4a53c3fca Use clone_from_subtree to generate content for the svg:use.
wycc
parents: 1395
diff changeset
1302 }
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1303 n.coord = coord;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1304 coord.node = n;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1305 this._check_duplicate_src(n,coord);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1306
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1307 coord.center= new Object();
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1308 coord.center.x = 10000;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1309 coord.center.y = 10000;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1310 if (trans!=null) {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1311 parseTransform(coord, trans.value());
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1312 } else {
1400
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1313 generateAffineParameters(coord);
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1314 }
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1315 multiply(accu,accu_matrix);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1316 multiply(accu,coord);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1317
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1318 style = {};
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1319 parseGroupStyle(style, n);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1320 if(style.opacity) {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1321 sys.puts("opacity=" + style.opacity);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1322 coord.opacity=style.opacity;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1323 }
1395
a768d74e5f49 Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object.
wycc
parents: 1392
diff changeset
1324
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1325 if (root.center.x > coord.center.x)
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1326 root.center.x = coord.center.x;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1327 if (root.center.y > coord.center.y)
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1328 root.center.y = coord.center.y;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1329 this._set_bbox(n, coord);
1376
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1330 this._groupMap[n.name()] = n;
1400
18215e577fe0 clone the affine matrix ofwhen we use clone_from_subtree. This function will not copy the affine matrix at all. We need to do it manually.
wycc
parents: 1398
diff changeset
1331
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
1332 make_mbnames(this.mb_rt, n, coord);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1333 };
776
77b561bb7929 Implement new algorithm to calculate the origin of the SVG elemnts so that we can implement object resize without changing the position of the object.
wycc
parents: 759
diff changeset
1334 loadSVG.prototype.parseImage=function(accu,coord,id, n)
646
3a1e80de44ff Add image support
wycc
parents: 632
diff changeset
1335 {
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1336 var ref = n.attr('href').value();
776
77b561bb7929 Implement new algorithm to calculate the origin of the SVG elemnts so that we can implement object resize without changing the position of the object.
wycc
parents: 759
diff changeset
1337 var tcoord = this.mb_rt.coord_new(coord);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1338 var trans = n.attr('transform');
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1339 n.coord = tcoord;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1340 tcoord.node = n;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1341 this._check_duplicate_src(n,tcoord);
646
3a1e80de44ff Add image support
wycc
parents: 632
diff changeset
1342
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1343 if (ref == null) return;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1344 if (ref.substr(0,7) == "file://") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1345 ref = ref.substring(7);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1346 } else if (ref.substr(0,5)=="file:") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1347 ref = ref.substring(5);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1348 } else {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1349 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1350 var w;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1351 var h;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1352 var x,y,nx,ny;
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1353 tcoord.center= new Object();
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1354 tcoord.center.x = 10000;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1355 tcoord.center.y = 10000;
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1356 if (trans!=null) {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1357 parseTransform(coord, trans.value());
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1358 } else {
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1359 tcoord.sx = 1;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1360 tcoord.sy = 1;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1361 tcoord.r = 0;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1362 tcoord.tx = 0;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1363 tcoord.ty = 0;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1364 }
646
3a1e80de44ff Add image support
wycc
parents: 632
diff changeset
1365
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1366 w = n.attr("width");
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1367 if (w == null) return;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1368 w = parseFloat(w.value());
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1369 h = n.attr("height");
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1370 if (h == null) return;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1371 h = parseFloat(h.value());
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1372 x = n.attr("x");
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1373 if (x == null) return;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1374 x = parseFloat(x.value());
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1375 y = n.attr("y");
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1376 if (y == null) return;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1377 y = parseFloat(y.value());
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1378 tcoord.tx += x;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1379 tcoord.ty += y;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1380 attr = n.attr('duplicate-src');
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1381 if (attr) {
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1382 var id = attr.value();
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: 1390
diff changeset
1383 var origcoord = this.mb_rt.mbnames[id];
cd5fb45bc247 Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents: 1390
diff changeset
1384 if (origcoord==null) {
cd5fb45bc247 Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents: 1390
diff changeset
1385 sys.puts("Unknown reference "+id);
cd5fb45bc247 Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents: 1390
diff changeset
1386 } else {
cd5fb45bc247 Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents: 1390
diff changeset
1387 var orign = origcoord.node;
cd5fb45bc247 Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents: 1390
diff changeset
1388 var nw = getInteger(orign,'width');
cd5fb45bc247 Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents: 1390
diff changeset
1389 var nh = getInteger(orign,'height');
cd5fb45bc247 Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents: 1390
diff changeset
1390 tcoord.sx *= w/nw;
cd5fb45bc247 Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents: 1390
diff changeset
1391 tcoord.sy *= h/nh;
cd5fb45bc247 Check if the scenes is defined. Disable the changeScene function if the scenes is not defined for the pure MB program.
wycc
parents: 1390
diff changeset
1392 }
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1393 }
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1394 nx = tcoord[0]*x+tcoord[1]*y+tcoord[2];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1395 ny = tcoord[3]*x+tcoord[4]*y+tcoord[5];
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1396 if (tcoord.center.x > nx)
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1397 tcoord.center.x = nx;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1398 if (tcoord.center.y > ny)
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1399 tcoord.center.y = ny;
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1400 var img = this.mb_rt.image_new(x,y,w,h);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1401 var img_data = ldr.load(ref);
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1402 try {
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1403 var paint = this.mb_rt.paint_image_new(img_data);
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1404 paint.fill(img);
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1405 } catch(e) {
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1406 sys.puts(e);
1385
2ebb07ee455e Fix the issue that we put the wrong entry for the groupMap for svg:g element.
wycc
parents: 1384
diff changeset
1407 sys.puts("--Can not load image "+ref);
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1408 }
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1409 tcoord.add_shape(img);
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
1410
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1411 this._set_bbox(n, tcoord);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
1412
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1413 make_mbnames(this.mb_rt, n, tcoord);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1414 };
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1415
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1416 function _parse_stops(n) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1417 var children;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1418 var child;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1419 var style;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1420 var color;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1421 var rgb;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1422 var opacity;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1423 var r, g, b, a;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1424 var offset_atr, offset;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1425 var stops = [];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1426 var i;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1427
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1428 children = n.childNodes();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1429 for(i = 0; i < children.length; i++) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1430 child = children[i];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1431 if(child.name() == "stop") {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1432 style = parse_style(child);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1433
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1434 color = style["stop-color"];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1435 if(color) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1436 rgb = parse_color(color);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1437 r = rgb[0];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1438 g = rgb[1];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1439 b = rgb[2];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1440 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1441
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1442 opacity = style["stop-opacity"];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1443 if(opacity)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1444 a = parseFloat(opacity);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1445 else
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1446 a = 1;
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1447
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1448 offset_attr = child.attr("offset");
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1449 if(offset_attr)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1450 offset = parseFloat(offset_attr.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1451 else
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1452 offset = 0;
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1453
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1454 stops.push([offset, r, g, b, a]);
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1455 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1456 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1457
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1458 return stops;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1459 };
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1460
750
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
1461 loadSVG.prototype._MB_parseLinearGradient=function(root,n)
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
1462 {
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
1463 var id = n.attr('id');
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1464 var k;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1465 var nodes = n.childNodes();
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1466 var mtx = [1, 0, 0, 0, 1, 0];
750
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
1467
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1468 if (id == null) return;
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1469 id = id.value();
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1470
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1471 var x1 = n.attr("x1");
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1472 var y1 = n.attr("y1");
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1473 var x2 = n.attr("x2");
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1474 var y2 = n.attr("y2");
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1475 var xy;
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1476 var gr;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1477 var color, opacity;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1478 var stops;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1479 var r,g,b;
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1480
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1481 if(x1)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1482 x1 = parseFloat(x1.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1483 if(x2)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1484 x2 = parseFloat(x2.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1485 if(y1)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1486 y1 = parseFloat(y1.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1487 if(y2)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1488 y2 = parseFloat(y2.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1489
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1490 stops = _parse_stops(n);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1491
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1492 var href = n.attr('href');
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1493 if(href != null) {
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1494 href = href.value();
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1495 var hrefid = href.substring(1);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1496 pstops = this.stop_ref[hrefid];
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1497 if (pstops)
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1498 stops = pstops.concat(stops);
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1499
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1500 var hrefgr = this.gradients[hrefid];
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1501 if(typeof x1 == "undefined")
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1502 x1 = hrefgr[0];
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1503 if(typeof y1 == "undefined")
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1504 y1 = hrefgr[1];
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1505 if(typeof x2 == "undefined")
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1506 x2 = hrefgr[2];
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1507 if(typeof y2 == "undefined")
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1508 y2 = hrefgr[3];
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1509 }
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1510
881
a17c4e231e54 Transform positions of radient paints.
Thinker K.F. Li <thinker@codemud.net>
parents: 880
diff changeset
1511 if(n.attr("gradientTransform")) {
a17c4e231e54 Transform positions of radient paints.
Thinker K.F. Li <thinker@codemud.net>
parents: 880
diff changeset
1512 parseTransform(mtx, n.attr("gradientTransform").value());
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1513 xy = _pnt_transform(x1, y1, mtx);
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1514 x1 = xy[0];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1515 y1 = xy[1];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1516 xy = _pnt_transform(x2, y2, mtx);
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1517 x2 = xy[0];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1518 y2 = xy[1];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1519 }
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1520
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1521 this.stop_ref[id] = stops;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1522 this.gradients[id] = [x1,y1,x2,y2];
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1523 };
750
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
1524
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1525 loadSVG.prototype._MB_parseRadialGradient = function(root,n) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1526 var stops;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1527 var cx, cy;
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1528 var xy;
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1529 var mtx = [1, 0, 0, 0, 1, 0];
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1530 var id;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1531 var href;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1532 var r;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1533
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1534 id = n.attr("id");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1535 if(!id)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1536 throw "Require an id";
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1537 id = id.value();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1538
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1539 stops = _parse_stops(n);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1540
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1541 cx = n.attr("cx");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1542 if(!cx)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1543 throw "Miss cx attribute";
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1544 cy = n.attr("cy");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1545 if(!cy)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1546 throw "Miss cy attribute";
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1547 cx = parseFloat(cx.value());
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1548 cy = parseFloat(cy.value());
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1549
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1550 r = n.attr("r");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1551 if(!r)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1552 throw "Miss r attribute";
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1553 r = parseFloat(r.value());
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1554
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1555 href = n.attr("href");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1556 if(href) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1557 href = href.value().substring(1);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1558 stops = this.stop_ref[href];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1559 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1560
881
a17c4e231e54 Transform positions of radient paints.
Thinker K.F. Li <thinker@codemud.net>
parents: 880
diff changeset
1561 if(n.attr("gradientTransform")) {
a17c4e231e54 Transform positions of radient paints.
Thinker K.F. Li <thinker@codemud.net>
parents: 880
diff changeset
1562 parseTransform(mtx, n.attr("gradientTransform").value());
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1563 xy = _pnt_transform(cx, cy, mtx);
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1564 cx = xy[0];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1565 cy = xy[1];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1566 }
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1567
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1568 this.radials[id] = [cx, cy, r];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1569 this.stop_ref[id] = stops;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1570 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1571
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1572 loadSVG.prototype.parseScenes=function(coord,node) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1573 var nodes = node.childNodes();
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1574
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1575 for(k in nodes) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1576 var name = nodes[k].name();
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1577 if (name == 'scene') {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1578 var node = nodes[k];
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1579
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1580 scene = new Object();
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1581 scene.start = parseInt(node.attr('start').value());
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1582 try {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1583 scene.end = parseInt(node.attr('end').value());
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1584 } catch(e) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1585 scene.end = scene.start;
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1586 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1587 scene.ref = node.attr('ref').value();
1376
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1588 try {
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1589 scene.type = node.attr('type').value();
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1590 } catch(e) {
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1591 scene.type='normal';
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1592 }
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1593
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1594 try {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1595 this.scenenames[node.attr('name').value()] = scene.start;
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1596 } catch(e) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1597 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1598 this.scenes.push(scene);
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1599 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1600 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1601 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1602
1376
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1603 loadSVG.prototype.parseComponents=function(coord,node) {
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1604
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1605 var nodes = node.childNodes();
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1606
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1607 for(k in nodes) {
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1608 var name = nodes[k].name();
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1609 if (name == 'component') {
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1610 // Parse the component here
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1611 }
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1612 }
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1613 }
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1614
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1615 loadSVG.prototype.parseMetadata=function(coord,node) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1616 var nodes = node.childNodes();
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1617
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1618 for(k in nodes) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1619 var name = nodes[k].name();
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1620 if (name == 'scenes') {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1621 this.scenes=[];
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1622 this.scenenames={};
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1623 this.parseScenes(coord,nodes[k]);
1376
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1624 } else if (name == "components") {
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1625 this.parseComponents(coord,nodes[k]);
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1626 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1627 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1628 }
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1629 loadSVG.prototype.parseDefs=function(root,n)
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1630 {
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1631 var k;
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1632 var nodes = n.childNodes();
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1633
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1634 for(k in nodes) {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1635 var name = nodes[k].name();
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1636 if (name == "linearGradient") {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1637 this._MB_parseLinearGradient(root,nodes[k]);
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1638 } else if(name == "radialGradient") {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1639 this._MB_parseRadialGradient(root,nodes[k]);
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1640 }
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1641 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1642 };
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1643
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1644
1390
e6d826db527c Fix the forward refeence issue.
wycc
parents: 1389
diff changeset
1645 exports.loadSVG = loadSVG;