annotate nodejs/svg.js @ 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. Ad center object when the bbox-x is not available.
author wycc
date Sat, 02 Apr 2011 05:36:36 +0800
parents cd5fb45bc247
children 6fa4a53c3fca
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);
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
59
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
60
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
61 if(_root.attr("width")) {
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
62 k = _root.attr("width").value();
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
63 this.width = parseFloat(k);
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
64 }
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
65 if(_root.attr("height")) {
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
66 k = _root.attr("height").value();
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
67 this.height = parseFloat(k);
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
68 }
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
69
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
70 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
71 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
72 if (n == "defs") {
914
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
73 this.parseDefs(coord,nodes[k]);
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
74 } else if (n == "metadata") {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
75 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
76 } else if (n == "g") {
914
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
77 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
78 }
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
79 }
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
80 }
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
81
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
82
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
83
914
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
84 loadSVG.prototype.leaveSVG=function()
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
85 {
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
86 var p = this.pgstack.pop();
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
87 p.hide();
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
88 if (this.pgstack.length > 0)
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
89 this.pgstack[this.pgstack.length-1].show();
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
90 }
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
91
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
92 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
93 var mbname;
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
94 var name;
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
95
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
96 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
97 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
98
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
99 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
100 if(mbname) {
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
101 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
102 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
103 }
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
104 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
105 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
106 name = 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
107 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
108 }
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
109 try {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
110 var gname = n.attr('id').value();
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
111 sys.puts("defone object "+ gname);
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
112 mb_rt.mbnames[gname] = obj;
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
113 } catch(e) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
114 }
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
115 }
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
116
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
117 function getInteger(n,name)
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
118 {
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
119 if (n == null) return 0;
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
120 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
121 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
122 return parseInt(a.value());
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
123 }
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
124
631
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
125 function parsePointSize(s)
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
126 {
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
127 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
128 var i;
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
129
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
130 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
131 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
132 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
133 }
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
134 return fs;
631
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
135
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
136 }
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
137
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
138 function parse_style(node) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
139 var style_attr;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
140 var style;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
141 var parts, part;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
142 var kv, key, value;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
143 var content = {};
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
144 var i;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
145
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
146 style_attr = node.attr('style');
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
147 if(!style_attr)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
148 return content;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
149
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
150 style = style_attr.value();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
151 parts = style.split(';');
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
152 for(i = 0; i < parts.length; i++) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
153 part = parts[i].trim();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
154 if(part) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
155 kv = part.split(':');
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
156 key = kv[0].trim();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
157 value = kv[1].trim();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
158 content[key] = value;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
159 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
160 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
161
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
162 return content;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
163 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
164
631
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
165 function parseColor(c)
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
166 {
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
167 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
168 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
169 }
631
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
170 }
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
171
631
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
172 function parseTextStyle(style,n)
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
173 {
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
174 var attr;
625
9f2080b68f8e Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents: 624
diff changeset
175 if (n) {
9f2080b68f8e Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents: 624
diff changeset
176 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
177 } 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
178 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
179 }
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
180 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
181 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
182 }
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
183 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
184
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
185 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
186 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
187 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
188 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
189 } 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
190 } 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
191 } 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
192 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
193 } 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
194 } 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
195 } 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
196 } 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
197 } 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
198 } 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
199 } 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
200 } 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
201 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
202 } 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
203 } 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
204 } 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
205 } 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
206 } 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
207 } 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
208 } 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
209 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
210 }
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 }
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
212 }
732
6879aa403306 Add set_text to the coordinate of the coord_t of the text.
wycc
parents: 720
diff changeset
213 function tspan_set_text(text)
6879aa403306 Add set_text to the coordinate of the coord_t of the text.
wycc
parents: 720
diff changeset
214 {
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
215 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
216 }
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
217
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
218 function _parse_font_size(fn_sz_str) {
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
219 var pos;
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
220
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
221 pos = fn_sz_str.search("px");
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
222 if(pos >= 0)
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
223 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
224 pos = fn_sz_str.search("pt");
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
225 if(pos >= 0)
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
226 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
227
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
228 return parseFloat(fn_sz_str);
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
229 }
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
230
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
231 loadSVG.prototype.parseTSpan = function(coord, n, pstyle) {
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
232 var x = getInteger(n,'x');
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
233 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
234 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
235 var style;
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
236 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
237 var weight = 80;
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
238 var slant = 0;
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
239 var sz = 10;
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
240 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
241 var k;
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
242 var obj = this.mb_rt.stext_new(n.text(),x,y);
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
243
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
244 style = parse_style(n);
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
245 for(k in pstyle) {
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
246 if(k in style)
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
247 continue;
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
248 style[k] = pstyle[k];
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
249 }
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
250
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
251 if("font-family" in style)
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
252 family = style["font-family"];
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
253 if("font-size" in style)
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
254 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
255 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
256 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
257 weight = 200;
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
258 }
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
259 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
260 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
261 slant = 110;
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
262 }
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
263
902
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
264 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
265 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
266
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
267 tcoord.add_shape(obj);
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
268 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
269 tcoord.text = obj;
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
270
882
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
271 this._set_paint_style(style, obj);
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
272 this._set_bbox(n, obj);
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
273
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
274 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
275 };
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
276
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
277 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
278 var paint;
713
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
279 var c;
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
280
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
281 if (color[0]=='#') {
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
282 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
283 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
284 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
285 b = parseInt(color.substring(5,7),16)/255;
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
286 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
287 } else if(_std_colors[color]) {
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
288 c = _std_colors[color];
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
289 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
290 } else if (color.substring(0,3) == 'url') {
5723e5446b7c Fix incorrect variable name
Thinker K.F. Li <thinker@codemud.net>
parents: 802
diff changeset
291 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
292 if(id in this.gradients) {
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
293 var gr = this.gradients[id];
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
294 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
295 } else {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
296 var radial = this.radials[id];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
297 paint = this.mb_rt.paint_radial_new(radial[0],
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
298 radial[1],
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
299 radial[2]);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
300 }
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
301 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
302 } else {
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
303 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
304 }
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
305 return paint;
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
306 };
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
307
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
308 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
309 {
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
310 return;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
311 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
312 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
313 var pair;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
314 var i;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
315 var minx,miny;
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
316
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
317 minx = 10000;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
318 miny = 10000;
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
319
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
320 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
321 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
322 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
323 switch(type) {
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
324 case 'm':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
325 case 'l':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
326 case 'a':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
327 case 'x':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
328 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
329 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
330 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
331 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
332 i++;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
333 } 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
334 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
335 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
336 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
337 }
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
338 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
339 case 'q':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
340 // Implement this latter
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
341 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
342 case 'c':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
343 // Implement this latter
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
344 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
345 case 's':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
346 // Implement this latter
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
347 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
348 case 'h':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
349 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
350 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
351 case 'v':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
352 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
353 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
354 default:
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
355 continue;
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
356 }
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
357 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
358 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
359 }
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
360 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
361 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
362 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
363 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
364 };
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
365
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
366 function _mul(m1, m2) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
367 var res = new Array();
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
368
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
369 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
370 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
371 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
372 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
373 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
374 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
375
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
376 return res;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
377 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
378
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
379 function _pnt_transform(x, y, matrix) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
380 var rx, ry;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
381
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
382 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
383 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
384 return new Array(rx, ry);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
385 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
386
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
387 function _shift_transform(x, y, matrix) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
388 var rx, ry;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
389
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
390 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
391 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
392 return new Array(rx, ry);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
393 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
394
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
395 function _transform_bbox(bbox, matrix) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
396 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
397 var x, y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
398 var pnt;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
399 var pnts = new Array();
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
400 var i;
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 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
403 pnts.push(pnt);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
404 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
405 pnts.push(pnt);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
406 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
407 pnts.push(pnt);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
408 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
409 pnts.push(pnt);
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 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
412 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
413 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
414 pnt = pnts[i];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
415 if(pnt[0] < min_x)
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
416 min_x = pnt[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
417 if(pnt[1] < min_y)
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
418 min_y = pnt[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
419 if(pnt[0] > max_x)
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
420 max_x = pnt[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
421 if(pnt[1] > max_y)
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
422 max_y = pnt[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
423 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
424
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
425 bbox.x = min_x;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
426 bbox.y = min_y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
427 bbox.width = max_x - min_x;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
428 bbox.height = max_y - min_y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
429 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
430
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
431 function _reverse(m1) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
432 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
433 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
434
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
435 rev[3] = -m[3] / m[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
436 m[3] = 0;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
437 m[4] += rev[3] * m[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
438 m[5] += rev[3] * m[2];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
439
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
440 rev[1] = -m[1] / m[4];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
441 rev[0] += rev[1] * rev[3];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
442 m[1] = 0;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
443 m[2] += rev[1] * m[5];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
444
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
445 rev[2] = -m[2];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
446 rev[5] = -m[5];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
447
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
448 rev[0] = rev[0] / m[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
449 rev[1] = rev[1] / m[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
450 rev[2] = rev[2] / m[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
451
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
452 rev[3] = rev[3] / m[4];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
453 rev[4] = rev[4] / m[4];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
454 rev[5] = rev[5] / m[4];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
455
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
456 return rev;
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
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
459 var _bbox_proto = {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
460 _get_ac_saved_rev: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
461 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
462 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
463
936
a9abcdac0ae5 Fix issue of moving lightbar of testsvg.js.
Thinker K.F. Li <thinker@codemud.net>
parents: 928
diff changeset
464 c = c.parent;
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
465
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
466 mtx = c._mbapp_saved_rev_mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
467 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
468 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
469 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
470 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
471
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
472 return mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
473 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
474
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
475 _get_ac_mtx: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
476 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
477 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
478
936
a9abcdac0ae5 Fix issue of moving lightbar of testsvg.js.
Thinker K.F. Li <thinker@codemud.net>
parents: 928
diff changeset
479 c = c.parent;
854
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 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
482 while(c.parent) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
483 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
484 mtx = _mul(c, mtx);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
485 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
486
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
487 return mtx;
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
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
490 _saved_to_current: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
491 var r;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
492
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
493 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
494
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
495 return r;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
496 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
497
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
498 /*! \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
499 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
500 update: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
501 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
502
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
503 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
504 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
505 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
506 this.height = this.orig.height;
854
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 mtx = this._saved_to_current();
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
509 _transform_bbox(this, mtx);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
510 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
511 };
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
512
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
513 var _center_proto = {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
514 _get_ac_saved_rev: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
515 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
516 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
517
936
a9abcdac0ae5 Fix issue of moving lightbar of testsvg.js.
Thinker K.F. Li <thinker@codemud.net>
parents: 928
diff changeset
518 c = c.parent;
854
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 mtx = c._mbapp_saved_rev_mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
521 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
522 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
523 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
524 }
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 return mtx;
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
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
529 _get_ac_mtx: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
530 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
531 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
532
936
a9abcdac0ae5 Fix issue of moving lightbar of testsvg.js.
Thinker K.F. Li <thinker@codemud.net>
parents: 928
diff changeset
533 c = c.parent;
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
534
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
535 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
536 while(c.parent) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
537 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
538 mtx = _mul(c, mtx);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
539 }
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 return mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
542 },
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 _get_ac_rev: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
545 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
546 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
547
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
548 if(c.type != "coord")
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
549 c = c.parent; // is a shape!
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
550
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
551 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
552 while(c.parent) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
553 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
554 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
555 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
556
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
557 return mtx;
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
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
560 _saved_to_current: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
561 var r;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
562
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
563 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
564
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
565 return r;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
566 },
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 /*! \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
569 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
570 update: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
571 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
572 var xy;
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 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
575 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
576
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
577 this._x = xy[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
578 this._y = xy[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
579 },
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 /*! \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
582 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
583 move: function(x, y) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
584 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
585 var xdiff = x - this._x;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
586 var ydiff = y - this._y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
587 var shiftxy;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
588 var c;
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 mtx = this._get_ac_rev();
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
591 shiftxy = _shift_transform(xdiff, ydiff, mtx);
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 c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
594 if(c.type != "coord")
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
595 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
596
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
597 c[2] += shiftxy[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
598 c[5] += shiftxy[1];
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 this._x = x;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
601 this._y = y;
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
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
604 /*! \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
605 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
606 move_pnt: function(pnt) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
607 this.move(pnt.x, pnt.y);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
608 },
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 /*! \brief Prevent user to modify value.
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
611 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
612 get x() { return this._x; },
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 Prevent user to modify value.
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 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
617
936
a9abcdac0ae5 Fix issue of moving lightbar of testsvg.js.
Thinker K.F. Li <thinker@codemud.net>
parents: 928
diff changeset
618 /*! \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
619 */
857
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
620 get rel() {
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
621 var rev;
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
622 var xy;
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
623
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
624 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
625 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
626
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
627 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
628 },
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
629 };
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
630
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
631 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
632 var a;
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
633 var vstr;
808
9b6c26cf9102 Move bounding box and center back to an object
Thinker K.F. Li <thinker@codemud.net>
parents: 807
diff changeset
634 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
635 var orig;
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
636
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
637 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
638 if(!a) {
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
639 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
640 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
641 tgt.center.y=0;
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
642 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
643 }
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
644
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
645 /* 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
646 * 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
647 */
808
9b6c26cf9102 Move bounding box and center back to an object
Thinker K.F. Li <thinker@codemud.net>
parents: 807
diff changeset
648 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
649 bbox.orig = orig = new Object();
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
650 bbox.owner = tgt;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
651 bbox.__proto__ = _bbox_proto;
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
652 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
653 orig.x = parseFloat(vstr);
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
654
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
655 a = node.attr("bbox-y");
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
656 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
657 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
658
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
659 a = node.attr("bbox-width");
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
660 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
661 orig.width = parseFloat(vstr);
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
662
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
663 a = node.attr("bbox-height");
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
664 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
665 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
666 orig.y -= orig.height;
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
667
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
668 bbox.update();
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
669
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
670 /* 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
671 * 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
672 * 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
673 */
808
9b6c26cf9102 Move bounding box and center back to an object
Thinker K.F. Li <thinker@codemud.net>
parents: 807
diff changeset
674 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
675 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
676
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
677 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
678 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
679 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
680 if(a) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
681 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
682 orig.x += parseFloat(vstr);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
683 a = node.attr("transform-center-y");
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
684 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
685 orig.y -= parseFloat(vstr);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
686 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
687 center.__proto__ = _center_proto;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
688 center.owner = tgt;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
689 center.update();
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
690
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
691 return 1;
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
692 }
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
693
882
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
694 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
695 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
696 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
697 var stroke_alpha = 1;
877
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
698 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
699 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
700 var stroke_color;
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
701 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
702 var i;
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
703
877
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
704 if(style) {
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
705 if('opacity' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
706 alpha = parseFloat(style['opacity']);
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
707 if('fill' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
708 fill_color = style['fill'];
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
709 if('fill-opacity' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
710 fill_alpha = parseFloat(style['fill-opacity']);
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
711 if('stroke' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
712 stroke_color = style['stroke'];
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
713 if('stroke-width' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
714 stroke_width = parseFloat(style['stroke-width']);
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
715 if('stroke-opacity' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
716 stroke_alpha = parseFloat(style['stroke-opacity']);
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
717 if('display' in style && style['display'] == 'none')
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
718 return;
717
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
719 }
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
720
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
721 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
722 if(fill_color != "none") {
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
723 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
724 paint.fill(tgt);
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
725 }
717
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
726 }
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
727 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
728 if(stroke_color != "none") {
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
729 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
730 paint.stroke(tgt);
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
731 }
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
732 }
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
733
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
734 tgt.stroke_width = stroke_width;
888
143ac14c3ce9 Set opacity for a path.
Thinker K.F. Li <thinker@codemud.net>
parents: 883
diff changeset
735
143ac14c3ce9 Set opacity for a path.
Thinker K.F. Li <thinker@codemud.net>
parents: 883
diff changeset
736 if(alpha < 1)
143ac14c3ce9 Set opacity for a path.
Thinker K.F. Li <thinker@codemud.net>
parents: 883
diff changeset
737 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
738 };
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
739
882
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
740 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
741 var style;
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
742
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
743 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
744 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
745 };
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
746
880
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
747 function formalize_path_data(d) {
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
748 var posM, posm;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
749 var pos;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
750 var nums = "0123456789+-.";
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
751 var rel = false;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
752 var cmd;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
753
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
754 posM = d.search("M");
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
755 posm = d.search("m");
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
756 pos = posm < posM? posm: posM;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
757 if(pos == -1)
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
758 pos = posM == -1? posm: posM;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
759 if(pos == -1)
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
760 return d;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
761
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
762 if(posm == pos)
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
763 rel = true;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
764
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
765 pos = pos + 1;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
766 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
767 pos++;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
768 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
769 pos++;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
770 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
771 pos++;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
772 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
773 pos++;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
774 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
775 pos++;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
776 if(nums.search(d[pos]) >= 0) {
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
777 if(rel)
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
778 cmd = "l";
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
779 else
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
780 cmd = "L";
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
781 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
782 }
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
783 return d;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
784 }
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
785
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
786 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
787 {
880
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
788 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
789 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
790 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
791 var pcoord = this.mb_rt.coord_new(coord);
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
792 pcoord.node = n;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
793 n.coord = pcoord;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
794 this._check_duplicate_src(n,pcoord);
880
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
795
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
796 //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
797 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
798 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
799 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
800 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
801 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
802 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
803 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
804 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
805 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
806 }
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
807
888
143ac14c3ce9 Set opacity for a path.
Thinker K.F. Li <thinker@codemud.net>
parents: 883
diff changeset
808 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
809 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
810 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
811
888
143ac14c3ce9 Set opacity for a path.
Thinker K.F. Li <thinker@codemud.net>
parents: 883
diff changeset
812 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
813 };
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
814
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
815 loadSVG.prototype.parseText=function(accu,coord,id, n)
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
816 {
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
817 var x = getInteger(n,'x');
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
818 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
819 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
820 var style;
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
821
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
822 tcoord.node = n;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
823 n.coord = tcoord;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
824 this._check_duplicate_src(n,tcoord);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
825
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
826 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
827 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
828 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
829 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
830 }
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
831 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
832 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
833 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
834 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
835 }
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
836 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
837 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
838 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
839 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
840 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
841 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
842 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
843 } 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
844 }
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
845 }
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
846 this._set_bbox(n, tcoord);
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
847
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
848 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
849 };
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
850
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
851
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
852 function multiply(s,d) {
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
853 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
854 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
855 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
856 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
857 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
858 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
859 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
860 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
861 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
862 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
863 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
864 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
865 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
866 };
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
867
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
868 function parseTransform(coord, s)
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
869 {
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
870 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
871 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
872 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
873 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
874 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
875 }
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
876 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
877 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
878 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
879 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
880 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
881 }
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
882 }
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
883 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
884 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
885 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
886 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
887 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
888 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
889 }
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
890 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
891 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
892 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
893 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
894 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
895 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
896 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
897 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
898 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
899 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
900 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
901 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
902 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
903 }
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
904 if (coord[0]*coord[4] == coord[1]*coord[3]) {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
905 sys.puts("Singular affine matrix\n");
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
906 coord.sx = 1;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
907 coord.sy = 1;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
908 coord.r = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
909 coord.tx = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
910 coord.ty = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
911 return;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
912 }
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
913 A = coord[0];
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
914 B = coord[3];
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
915 C = coord[1];
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
916 D = coord[4];
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
917 E = coord[2];
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
918 F = coord[5];
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
919 sx = Math.sqrt(A*A+B*B);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
920 A = A / sx;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
921 B = B / sx;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
922 shear = A*C+B*D;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
923 C = C - A*shear;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
924 D = D - B*shear;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
925 sy = Math.sqrt(C*C+D*D);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
926 C = C / sy;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
927 D = D / sy;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
928 r = A*D - B*C;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
929 if (r == -1) {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
930 shear = - shear;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
931 sy = -sy;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
932 }
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
933 R = Math.atan2(-B,A);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
934 coord.sx = sx;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
935 coord.sy = sy;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
936 coord.r = R;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
937 coord.tx = E;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
938 coord.ty = F;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
939 sys.puts("transform="+s);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
940 sys.puts("coord[0]="+coord[0]);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
941 sys.puts("coord[1]="+coord[1]);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
942 sys.puts("coord[2]="+coord[2]);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
943 sys.puts("coord[3]="+coord[3]);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
944 sys.puts("coord[4]="+coord[4]);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
945 sys.puts("coord[5]="+coord[5]);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
946 sys.puts("coord.sx="+coord.sx);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
947 sys.puts("coord.sy="+coord.sy);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
948 sys.puts("coord.r="+coord.r);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
949 sys.puts("coord.tx="+coord.tx);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
950 sys.puts("coord.ty="+coord.ty);
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
951 }
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
952
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
953 loadSVG.prototype.parseRect=function(accu_matrix,coord, id, n)
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
954 {
703
3457519e3b9c Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents: 647
diff changeset
955 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
956 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
957 var rx,ry;
703
3457519e3b9c Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents: 647
diff changeset
958 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
959 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
960 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
961 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
962 var tcoord = this.mb_rt.coord_new(coord);
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
963 tcoord.node = n;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
964 n.coord = tcoord;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
965 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
966
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
967 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
968
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
969 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
970 parseTransform(tcoord,trans.value());
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
971 else {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
972 tcoord.sx = 1;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
973 tcoord.sy = 1;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
974 tcoord.r = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
975 tcoord.tx = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
976 tcoord.ty = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
977 }
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
978
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
979 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
980 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
981 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
982 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
983 var id = attr.value();
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
984 var orign = this.mb_rt.mbnames[id].node;
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
985 sys.puts("xxxxxxxxxxxxxx");
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
986 var nw = getInteger(orign,'width');
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
987 var nh = getInteger(orign,'height');
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
988 sys.puts("nw="+nw);
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
989 sys.puts("nh="+nh);
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
990 sys.puts("w="+w);
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
991 sys.puts("h="+h);
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
992 tcoord.sx *= w/nw;
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
993 tcoord.sy *= h/nh;
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
994 }
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
995
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
996
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
997
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
998 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
999 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
1000 this._set_paint(n, rect);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
1001 this._set_bbox(n, tcoord);
788
7ec13634c97d Add holder for animate
Thinker K.F. Li <thinker@codemud.net>
parents: 787
diff changeset
1002
7ec13634c97d Add holder for animate
Thinker K.F. Li <thinker@codemud.net>
parents: 787
diff changeset
1003 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
1004 };
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
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 // 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
1007 // 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
1008 // 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
1009 // 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
1010 // 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
1011 // 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
1012 //
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
1013 // 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
1014 // 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
1015
810
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1016 function parseGroupStyle(style,n)
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1017 {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1018 var attr;
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1019 if (n) {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1020 attr = n.attr('style');
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1021 } else {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1022 attr = null;
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1023 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1024 if (attr == null) {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1025 return;
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1026 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1027 var f = attr.value().split(';');
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1028
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1029 for(i in f) {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1030 var kv = f[i].split(':');
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1031 if (kv[0] == 'opacity') {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1032 style.opacity = parseFloat(kv[1]);
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1033 } else {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1034 sys.puts("Unknown style: "+kv[0]);
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1035 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1036 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1037 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1038
1376
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1039 loadSVG.prototype.duplicateGroup=function(id,root) {
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1040 n = this._groupMap[id];
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1041 var m = [1,0,0,1,0,0]
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1042 this.parseGroup(m,root,id, n)
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1043 }
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1044
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1045 loadSVG.prototype._check_duplicate_src=function(n,coord) {
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
1046 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
1047 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
1048 } 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
1049 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
1050 }
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1051 var attr = n.attr('duplicate-src');
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1052 if (attr == null) return;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1053 var id = attr.value();
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1054 try {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1055 this.mb_rt.mbnames[id].target = coord;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1056 } catch(e) {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1057 sys.puts("id "+id+" is not defined");
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1058 }
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1059 }
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1060
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
1061 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
1062 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
1063 if (label && label.value()=='dup') return;
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1064 var k;
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1065 var nodes = n.childNodes();
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
1066 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
1067 // 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
1068 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
1069 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
1070 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
1071
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1072 n.coord = coord;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1073 coord.node = n;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1074 this._check_duplicate_src(n,coord);
810
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1075
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
1076 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
1077 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
1078 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
1079 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
1080 parseTransform(coord, trans.value());
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1081 } else {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1082 coord.sx = 1;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1083 coord.sy = 1;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1084 coord.r = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1085 coord.tx = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1086 coord.ty = 0;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1087 }
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
1088 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
1089 multiply(accu,coord);
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1090
810
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1091 style = {};
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1092 parseGroupStyle(style, n);
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
1093 if(style.opacity) {
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1094 sys.puts("opacity=" + style.opacity);
830
2a73ff24c141 Use accessor to replace the method to setup the opacity
wycc
parents: 810
diff changeset
1095 coord.opacity=style.opacity;
810
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
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 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
1098 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
1099 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
1100 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
1101 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
1102 id = attr.value();
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1103 }
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
1104 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
1105 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
1106 } 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
1107 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
1108 } 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
1109 this.parseText(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
1110 } 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
1111 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
1112 } 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
1113 this.parseImage(accu_matrix,coord, id, nodes[k]);
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1114 } else if (c == "use") {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1115 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
1116 }
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
1117 }
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
1118 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
1119 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
1120 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
1121 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
1122
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
1123 this._set_bbox(n, coord);
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1124 // 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
1125 // 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
1126 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
1127 this._groupMap[group_id] = n;
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1128
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1129 make_mbnames(this.mb_rt, n, coord);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1130 return coord;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1131 };
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1132
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1133 loadSVG.prototype.parseUse=function(accu_matrix,root, use_id, n) {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1134 var k;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1135 var nodes;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1136 var coord = this.mb_rt.coord_new(root);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1137 // Parse the transform and style here
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1138 var trans = n.attr('transform');
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1139 var accu=[1,0,0,0,1,0];
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1140 var style;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1141 n.coord = coord;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1142 coord.node = n;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1143 this._check_duplicate_src(n,coord);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1144
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1145 coord.center= new Object();
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1146 coord.center.x = 10000;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1147 coord.center.y = 10000;
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
1148 sys.puts("use id="+use_id+" "+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
1149 sys.puts(n);
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1150 if (trans!=null) {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1151 parseTransform(coord, trans.value());
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1152 } else {
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1153 coord.sx = 1;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1154 coord.sy = 1;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1155 coord.r = 0;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1156 coord.tx = 0;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1157 coord.ty = 0;
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1158
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1159 }
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
1160 var attr = n.attr('duplicate-src');
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
1161 if (attr) {
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
1162 var src = this.mb_rt.mbnames[attr.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
1163 multiply(coord, coord,src);
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
1164 }
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1165 multiply(accu,accu_matrix);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1166 multiply(accu,coord);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1167
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1168 style = {};
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1169 parseGroupStyle(style, n);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1170 if(style.opacity) {
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1171 sys.puts("opacity=" + style.opacity);
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1172 coord.opacity=style.opacity;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1173 }
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
1174
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1175 if (root.center.x > coord.center.x)
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1176 root.center.x = coord.center.x;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1177 if (root.center.y > coord.center.y)
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1178 root.center.y = coord.center.y;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1179
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1180 this._set_bbox(n, coord);
1376
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1181 this._groupMap[n.name()] = n;
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
1182
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
1183 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
1184 };
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
1185 loadSVG.prototype.parseImage=function(accu,coord,id, n)
646
3a1e80de44ff Add image support
wycc
parents: 632
diff changeset
1186 {
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
1187 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
1188 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
1189 var trans = n.attr('transform');
1378
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1190 n.coord = tcoord;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1191 tcoord.node = n;
9ce82873d406 CHange the SVG parser for the scribbo animation.
wycc
parents: 1376
diff changeset
1192 this._check_duplicate_src(n,tcoord);
646
3a1e80de44ff Add image support
wycc
parents: 632
diff changeset
1193
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
1194 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
1195 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
1196 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
1197 } 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
1198 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
1199 } 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
1200 }
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
1201 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
1202 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
1203 var x,y,nx,ny;
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1204 tcoord.center= new Object();
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1205 tcoord.center.x = 10000;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1206 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
1207 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
1208 parseTransform(coord, trans.value());
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1209 } else {
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1210 tcoord.sx = 1;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1211 tcoord.sy = 1;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1212 tcoord.r = 0;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1213 tcoord.tx = 0;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1214 tcoord.ty = 0;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1215 }
646
3a1e80de44ff Add image support
wycc
parents: 632
diff changeset
1216
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
1217 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
1218 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
1219 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
1220 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
1221 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
1222 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
1223 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
1224 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
1225 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
1226 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
1227 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
1228 y = parseFloat(y.value());
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1229 tcoord.tx += x;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1230 tcoord.ty += y;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1231 attr = n.attr('duplicate-src');
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1232 if (attr) {
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1233 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
1234 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
1235 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
1236 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
1237 } 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
1238 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
1239 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
1240 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
1241 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
1242 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
1243 }
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1244 }
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
1245 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
1246 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
1247 if (tcoord.center.x > nx)
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1248 tcoord.center.x = nx;
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1249 if (tcoord.center.y > ny)
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1250 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
1251 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
1252 var img_data = ldr.load(ref);
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1253 try {
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1254 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
1255 paint.fill(img);
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1256 } catch(e) {
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1257 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
1258 sys.puts("--Can not load image "+ref);
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1259 }
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
1260 tcoord.add_shape(img);
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
1261
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1262 this._set_bbox(n, tcoord);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
1263
1384
98ea7146cef3 Fix the parseImage to setup the transform attributes correctly.
wycc
parents: 1381
diff changeset
1264 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
1265 };
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1266
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1267 function _parse_stops(n) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1268 var children;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1269 var child;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1270 var style;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1271 var color;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1272 var rgb;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1273 var opacity;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1274 var r, g, b, a;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1275 var offset_atr, offset;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1276 var stops = [];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1277 var i;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1278
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1279 children = n.childNodes();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1280 for(i = 0; i < children.length; i++) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1281 child = children[i];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1282 if(child.name() == "stop") {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1283 style = parse_style(child);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1284
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1285 color = style["stop-color"];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1286 if(color) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1287 rgb = parse_color(color);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1288 r = rgb[0];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1289 g = rgb[1];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1290 b = rgb[2];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1291 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1292
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1293 opacity = style["stop-opacity"];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1294 if(opacity)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1295 a = parseFloat(opacity);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1296 else
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1297 a = 1;
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1298
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1299 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
1300 if(offset_attr)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1301 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
1302 else
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1303 offset = 0;
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1304
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1305 stops.push([offset, r, g, b, a]);
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1306 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1307 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1308
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1309 return stops;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1310 };
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1311
750
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
1312 loadSVG.prototype._MB_parseLinearGradient=function(root,n)
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
1313 {
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
1314 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
1315 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
1316 var nodes = n.childNodes();
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1317 var mtx = [1, 0, 0, 0, 1, 0];
750
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
1318
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
1319 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
1320 id = id.value();
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1321
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
1322 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
1323 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
1324 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
1325 var y2 = n.attr("y2");
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1326 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
1327 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
1328 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
1329 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
1330 var r,g,b;
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1331
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1332 if(x1)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1333 x1 = parseFloat(x1.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1334 if(x2)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1335 x2 = parseFloat(x2.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1336 if(y1)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1337 y1 = parseFloat(y1.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1338 if(y2)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1339 y2 = parseFloat(y2.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1340
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1341 stops = _parse_stops(n);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
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 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
1344 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
1345 href = href.value();
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1346 var hrefid = href.substring(1);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1347 pstops = this.stop_ref[hrefid];
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1348 if (pstops)
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1349 stops = pstops.concat(stops);
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1350
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1351 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
1352 if(typeof x1 == "undefined")
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1353 x1 = hrefgr[0];
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1354 if(typeof y1 == "undefined")
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1355 y1 = hrefgr[1];
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1356 if(typeof x2 == "undefined")
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1357 x2 = hrefgr[2];
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1358 if(typeof y2 == "undefined")
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1359 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
1360 }
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1361
881
a17c4e231e54 Transform positions of radient paints.
Thinker K.F. Li <thinker@codemud.net>
parents: 880
diff changeset
1362 if(n.attr("gradientTransform")) {
a17c4e231e54 Transform positions of radient paints.
Thinker K.F. Li <thinker@codemud.net>
parents: 880
diff changeset
1363 parseTransform(mtx, n.attr("gradientTransform").value());
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1364 xy = _pnt_transform(x1, y1, mtx);
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1365 x1 = xy[0];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1366 y1 = xy[1];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1367 xy = _pnt_transform(x2, y2, mtx);
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1368 x2 = xy[0];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1369 y2 = xy[1];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1370 }
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1371
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
1372 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
1373 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
1374 };
750
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
1375
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1376 loadSVG.prototype._MB_parseRadialGradient = function(root,n) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1377 var stops;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1378 var cx, cy;
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1379 var xy;
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1380 var mtx = [1, 0, 0, 0, 1, 0];
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1381 var id;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1382 var href;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1383 var r;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1384
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1385 id = n.attr("id");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1386 if(!id)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1387 throw "Require an id";
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1388 id = id.value();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1389
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1390 stops = _parse_stops(n);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1391
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1392 cx = n.attr("cx");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1393 if(!cx)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1394 throw "Miss cx attribute";
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1395 cy = n.attr("cy");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1396 if(!cy)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1397 throw "Miss cy attribute";
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1398 cx = parseFloat(cx.value());
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1399 cy = parseFloat(cy.value());
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1400
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1401 r = n.attr("r");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1402 if(!r)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1403 throw "Miss r attribute";
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1404 r = parseFloat(r.value());
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1405
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1406 href = n.attr("href");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1407 if(href) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1408 href = href.value().substring(1);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1409 stops = this.stop_ref[href];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1410 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1411
881
a17c4e231e54 Transform positions of radient paints.
Thinker K.F. Li <thinker@codemud.net>
parents: 880
diff changeset
1412 if(n.attr("gradientTransform")) {
a17c4e231e54 Transform positions of radient paints.
Thinker K.F. Li <thinker@codemud.net>
parents: 880
diff changeset
1413 parseTransform(mtx, n.attr("gradientTransform").value());
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1414 xy = _pnt_transform(cx, cy, mtx);
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1415 cx = xy[0];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1416 cy = xy[1];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1417 }
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1418
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1419 this.radials[id] = [cx, cy, r];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1420 this.stop_ref[id] = stops;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1421 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1422
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1423 loadSVG.prototype.parseScenes=function(coord,node) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1424 var nodes = node.childNodes();
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1425
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1426 for(k in nodes) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1427 var name = nodes[k].name();
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1428 if (name == 'scene') {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1429 var node = nodes[k];
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1430
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1431 scene = new Object();
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1432 scene.start = parseInt(node.attr('start').value());
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1433 try {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1434 scene.end = parseInt(node.attr('end').value());
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1435 } catch(e) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1436 scene.end = scene.start;
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1437 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1438 scene.ref = node.attr('ref').value();
1376
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1439 try {
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1440 scene.type = node.attr('type').value();
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1441 } catch(e) {
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1442 scene.type='normal';
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1443 }
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1444
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1445 try {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1446 this.scenenames[node.attr('name').value()] = scene.start;
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1447 } catch(e) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1448 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1449 this.scenes.push(scene);
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1450 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1451 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1452 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1453
1376
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1454 loadSVG.prototype.parseComponents=function(coord,node) {
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1455
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1456 var nodes = node.childNodes();
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1457
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1458 for(k in nodes) {
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1459 var name = nodes[k].name();
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1460 if (name == 'component') {
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1461 // Parse the component here
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1462 }
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1463 }
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1464 }
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1465
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1466 loadSVG.prototype.parseMetadata=function(coord,node) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1467 var nodes = node.childNodes();
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1468
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1469 for(k in nodes) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1470 var name = nodes[k].name();
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1471 if (name == 'scenes') {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1472 this.scenes=[];
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1473 this.scenenames={};
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1474 this.parseScenes(coord,nodes[k]);
1376
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1475 } else if (name == "components") {
4c5bcaba28ea Check in so that we can check the crash issues.
wycc
parents: 1138
diff changeset
1476 this.parseComponents(coord,nodes[k]);
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1477 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1478 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1479 }
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
1480 loadSVG.prototype.parseDefs=function(root,n)
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1481 {
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1482 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
1483 var nodes = n.childNodes();
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1484
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
1485 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
1486 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
1487 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
1488 this._MB_parseLinearGradient(root,nodes[k]);
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1489 } else if(name == "radialGradient") {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1490 this._MB_parseRadialGradient(root,nodes[k]);
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
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 }
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
1493 };
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1494
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1495
1390
e6d826db527c Fix the forward refeence issue.
wycc
parents: 1389
diff changeset
1496 exports.loadSVG = loadSVG;