annotate nodejs/svg.js @ 1389:18494028f5bc

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