annotate nodejs/svg.js @ 1161:a7faab54e8f8

Fix broken of running animation - Running animation is stop automatically after a certain time. - It is 300ms according MBScene._updateUI(). - It is caused by notification of changing DOM tree. The notification handlers would call MBScene.updateUI() to update framelines and buttons. - MBScene.updateUI() would call MBScene.show() after 300ms, MBScene.show() calls MBScene.parseScene() in turn. - MBScene.parseScene() would remove duplicate group that is using by code of running animation, MBScene.doRunNext(). It make running animation stop. - fixed by setting MBScene.lockui when a running animation is started or stoped.
author Thinker K.F. Li <thinker@codemud.net>
date Tue, 28 Dec 2010 13:35:34 +0800
parents 593a418ed8bf
children 4c5bcaba28ea
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
914
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
35 exports.loadSVG=loadSVG;
784
37a1bd3e3ce1 mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents: 783
diff changeset
36
718
0cd59ce76e67 Refactor loadSVG as a class
Thinker K.F. Li <thinker@branda.to>
parents: 717
diff changeset
37 function loadSVG(mb_rt, root, filename) {
914
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
38 this.pgstack=[];
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
39 if (filename)
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
40 this.load(mb_rt,root,filename);
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
41 }
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
42
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
43 loadSVG.prototype.load=function(mb_rt, root, filename) {
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
44 var doc = libxml.parseXmlFile(filename);
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
45 var _root = doc.root();
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
46 var nodes = _root.childNodes();
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
47 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
48 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
49 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
50 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
51 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
52 this.gradients={};
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
53 this.radials = {};
914
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
54 coord.center=new Object();
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
55 coord.center.x = 10000;
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
56 coord.center.y = 10000;
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
57 if (this.pgstack.length > 0)
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
58 this.pgstack[this.pgstack.length-1].hide();
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
59 this.pgstack.push(coord);
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
60
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
61
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
62 if(_root.attr("width")) {
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
63 k = _root.attr("width").value();
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
64 this.width = parseFloat(k);
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
65 }
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
66 if(_root.attr("height")) {
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
67 k = _root.attr("height").value();
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
68 this.height = parseFloat(k);
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
69 }
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
70
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
71 for(k in nodes) {
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
72 var n = nodes[k].name();
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
73 if (n == "defs") {
914
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
74 this.parseDefs(coord,nodes[k]);
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
75 } else if (n == "metadata") {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
76 this.parseMetadata(coord,nodes[k]);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
77 } else if (n == "g") {
914
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
78 this.parseGroup(accu,coord,'root_coord',nodes[k]);
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
79 }
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
80 }
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
81 }
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
82
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
83
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
84
914
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
85 loadSVG.prototype.leaveSVG=function()
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
86 {
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
87 var p = this.pgstack.pop();
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
88 p.hide();
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
89 if (this.pgstack.length > 0)
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
90 this.pgstack[this.pgstack.length-1].show();
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
91 }
e4474cac20da Implement the page stack
wycc
parents: 902
diff changeset
92
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
93 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
94 var mbname;
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
95 var name;
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
96
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
97 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
98 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
99
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
100 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
101 if(mbname) {
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
102 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
103 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
104 return;
35b6a9411e26 Use inkscape:label to be the same way as the mbname. In this way, we can use the property editor to define name of the object.
wycc
parents: 914
diff changeset
105 }
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 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
107 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
108 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
109 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
110 }
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
111 try {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
112 var gname = n.attr('id').value();
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
113 sys.puts(gname);
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
114 mb_rt.mbnames[gname] = obj;
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
115 } catch(e) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
116 }
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
117 }
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
118
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
119 function getInteger(n,name)
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
120 {
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
121 if (n == null) return 0;
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
122 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
123 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
124 return parseInt(a.value());
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
125 }
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
126
631
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
127 function parsePointSize(s)
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
128 {
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
129 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
130 var i;
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
131
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
132 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
133 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
134 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
135 }
a47431293043 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 return fs;
631
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
137
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
138 }
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
139
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
140 function parse_style(node) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
141 var style_attr;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
142 var style;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
143 var parts, part;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
144 var kv, key, value;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
145 var content = {};
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
146 var i;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
147
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
148 style_attr = node.attr('style');
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
149 if(!style_attr)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
150 return content;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
151
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
152 style = style_attr.value();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
153 parts = style.split(';');
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
154 for(i = 0; i < parts.length; i++) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
155 part = parts[i].trim();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
156 if(part) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
157 kv = part.split(':');
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
158 key = kv[0].trim();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
159 value = kv[1].trim();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
160 content[key] = value;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
161 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
162 }
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 return content;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
165 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
166
631
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
167 function parseColor(c)
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
168 {
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
169 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
170 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
171 }
631
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
172 }
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
173
631
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
174 function parseTextStyle(style,n)
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
175 {
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
176 var attr;
625
9f2080b68f8e Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents: 624
diff changeset
177 if (n) {
9f2080b68f8e Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents: 624
diff changeset
178 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
179 } 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
180 attr = null;
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
181 }
a47431293043 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 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
183 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
184 }
a47431293043 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 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
186
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
187 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
188 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
189 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
190 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
191 } 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
192 } 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
193 } 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
194 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
195 } 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
196 } 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
197 } 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
198 } 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
199 } 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
200 } 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
201 } 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
202 } 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
203 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
204 } 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
205 } 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
206 } 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
207 } 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
208 } 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
209 } 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
210 } 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
211 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
212 }
a47431293043 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 }
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
214 }
732
6879aa403306 Add set_text to the coordinate of the coord_t of the text.
wycc
parents: 720
diff changeset
215 function tspan_set_text(text)
6879aa403306 Add set_text to the coordinate of the coord_t of the text.
wycc
parents: 720
diff changeset
216 {
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
217 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
218 }
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
219
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
220 function _parse_font_size(fn_sz_str) {
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
221 var pos;
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
222
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
223 pos = fn_sz_str.search("px");
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
224 if(pos >= 0)
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
225 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
226 pos = fn_sz_str.search("pt");
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
227 if(pos >= 0)
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
228 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
229
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
230 return parseFloat(fn_sz_str);
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
231 }
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 loadSVG.prototype.parseTSpan = function(coord, n, pstyle) {
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
234 var x = getInteger(n,'x');
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
235 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
236 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
237 var style;
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
238 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
239 var weight = 80;
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
240 var slant = 0;
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
241 var sz = 10;
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
242 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
243 var k;
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
244 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
245
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
246 style = parse_style(n);
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
247 for(k in pstyle) {
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
248 if(k in style)
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
249 continue;
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
250 style[k] = pstyle[k];
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
251 }
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 if("font-family" in style)
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
254 family = style["font-family"];
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
255 if("font-size" in style)
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
256 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
257 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
258 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
259 weight = 200;
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
260 }
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
261 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
262 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
263 slant = 110;
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
264 }
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
265
902
e86b4d56ddea Parse font-style and font-weight of SVG text
Thinker K.F. Li <thinker@codemud.net>
parents: 899
diff changeset
266 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
267 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
268
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
269 tcoord.add_shape(obj);
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
270 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
271 tcoord.text = obj;
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
272
882
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
273 this._set_paint_style(style, obj);
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
274 this._set_bbox(n, obj);
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
275
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
276 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
277 };
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
278
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
279 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
280 var paint;
713
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
281 var c;
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
282
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
283 if (color[0]=='#') {
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
284 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
285 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
286 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
287 b = parseInt(color.substring(5,7),16)/255;
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
288 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
289 } else if(_std_colors[color]) {
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
290 c = _std_colors[color];
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
291 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
292 } else if (color.substring(0,3) == 'url') {
5723e5446b7c Fix incorrect variable name
Thinker K.F. Li <thinker@codemud.net>
parents: 802
diff changeset
293 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
294 if(id in this.gradients) {
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
295 var gr = this.gradients[id];
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
296 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
297 } else {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
298 var radial = this.radials[id];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
299 paint = this.mb_rt.paint_radial_new(radial[0],
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
300 radial[1],
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
301 radial[2]);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
302 }
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
303 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
304 } else {
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
305 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
306 }
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
307 return paint;
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
308 };
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
309
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
310 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
311 {
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
312 return;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
313 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
314 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
315 var pair;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
316 var i;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
317 var minx,miny;
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
318
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
319 minx = 10000;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
320 miny = 10000;
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
321
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
322 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
323 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
324 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
325 switch(type) {
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
326 case 'm':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
327 case 'l':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
328 case 'a':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
329 case 'x':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
330 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
331 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
332 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
333 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
334 i++;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
335 } 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
336 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
337 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
338 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
339 }
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
340 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
341 case 'q':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
342 // Implement this latter
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
343 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
344 case 'c':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
345 // Implement this latter
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
346 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
347 case 's':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
348 // Implement this latter
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
349 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
350 case 'h':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
351 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
352 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
353 case 'v':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
354 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
355 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
356 default:
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
357 continue;
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
358 }
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
359 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
360 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
361 }
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
362 if (coord.center.x > minx)
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
363 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 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
365 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 };
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
367
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
368 function _mul(m1, m2) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
369 var res = new Array();
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
370
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
371 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
372 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
373 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
374 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
375 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
376 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
377
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
378 return res;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
379 }
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 function _pnt_transform(x, y, matrix) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
382 var rx, ry;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
383
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
384 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
385 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
386 return new Array(rx, ry);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
387 }
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 function _shift_transform(x, y, matrix) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
390 var rx, ry;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
391
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
392 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
393 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
394 return new Array(rx, ry);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
395 }
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 function _transform_bbox(bbox, matrix) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
398 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
399 var x, y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
400 var pnt;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
401 var pnts = new Array();
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
402 var i;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
403
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
404 pnt = _pnt_transform(bbox.x, bbox.y, matrix);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
405 pnts.push(pnt);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
406 pnt = _pnt_transform(bbox.x + bbox.width, bbox.y, matrix);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
407 pnts.push(pnt);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
408 pnt = _pnt_transform(bbox.x, bbox.y + bbox.height, matrix);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
409 pnts.push(pnt);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
410 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
411 pnts.push(pnt);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
412
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
413 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
414 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
415 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
416 pnt = pnts[i];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
417 if(pnt[0] < min_x)
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
418 min_x = pnt[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
419 if(pnt[1] < min_y)
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
420 min_y = pnt[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
421 if(pnt[0] > max_x)
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
422 max_x = pnt[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
423 if(pnt[1] > max_y)
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
424 max_y = pnt[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
425 }
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 bbox.x = min_x;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
428 bbox.y = min_y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
429 bbox.width = max_x - min_x;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
430 bbox.height = max_y - min_y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
431 }
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 function _reverse(m1) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
434 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
435 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
436
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
437 rev[3] = -m[3] / m[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
438 m[3] = 0;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
439 m[4] += rev[3] * m[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
440 m[5] += rev[3] * m[2];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
441
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
442 rev[1] = -m[1] / m[4];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
443 rev[0] += rev[1] * rev[3];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
444 m[1] = 0;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
445 m[2] += rev[1] * m[5];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
446
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
447 rev[2] = -m[2];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
448 rev[5] = -m[5];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
449
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
450 rev[0] = rev[0] / m[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
451 rev[1] = rev[1] / m[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
452 rev[2] = rev[2] / m[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
453
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
454 rev[3] = rev[3] / m[4];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
455 rev[4] = rev[4] / m[4];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
456 rev[5] = rev[5] / m[4];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
457
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
458 return rev;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
459 }
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 var _bbox_proto = {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
462 _get_ac_saved_rev: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
463 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
464 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
465
936
a9abcdac0ae5 Fix issue of moving lightbar of testsvg.js.
Thinker K.F. Li <thinker@codemud.net>
parents: 928
diff changeset
466 c = c.parent;
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
467
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
468 mtx = c._mbapp_saved_rev_mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
469 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
470 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
471 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
472 }
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 return mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
475 },
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 _get_ac_mtx: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
478 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
479 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
480
936
a9abcdac0ae5 Fix issue of moving lightbar of testsvg.js.
Thinker K.F. Li <thinker@codemud.net>
parents: 928
diff changeset
481 c = c.parent;
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
482
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
483 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
484 while(c.parent) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
485 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
486 mtx = _mul(c, mtx);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
487 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
488
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
489 return mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
490 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
491
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
492 _saved_to_current: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
493 var r;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
494
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
495 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
496
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
497 return r;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
498 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
499
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
500 /*! \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
501 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
502 update: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
503 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
504
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
505 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
506 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
507 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
508 this.height = this.orig.height;
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
509
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
510 mtx = this._saved_to_current();
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
511 _transform_bbox(this, mtx);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
512 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
513 };
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 var _center_proto = {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
516 _get_ac_saved_rev: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
517 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
518 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
519
936
a9abcdac0ae5 Fix issue of moving lightbar of testsvg.js.
Thinker K.F. Li <thinker@codemud.net>
parents: 928
diff changeset
520 c = c.parent;
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
521
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
522 mtx = c._mbapp_saved_rev_mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
523 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
524 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
525 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
526 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
527
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
528 return mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
529 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
530
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
531 _get_ac_mtx: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
532 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
533 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
534
936
a9abcdac0ae5 Fix issue of moving lightbar of testsvg.js.
Thinker K.F. Li <thinker@codemud.net>
parents: 928
diff changeset
535 c = c.parent;
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
536
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
537 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
538 while(c.parent) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
539 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
540 mtx = _mul(c, mtx);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
541 }
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 return mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
544 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
545
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
546 _get_ac_rev: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
547 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
548 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
549
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
550 if(c.type != "coord")
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
551 c = c.parent; // is a shape!
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
552
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
553 mtx = _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
554 while(c.parent) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
555 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
556 mtx = _mul(mtx, _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
557 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
558
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
559 return mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
560 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
561
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
562 _saved_to_current: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
563 var r;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
564
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
565 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
566
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
567 return r;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
568 },
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 /*! \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
571 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
572 update: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
573 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
574 var xy;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
575
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
576 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
577 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
578
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
579 this._x = xy[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
580 this._y = xy[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
581 },
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 /*! \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
584 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
585 move: function(x, y) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
586 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
587 var xdiff = x - this._x;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
588 var ydiff = y - this._y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
589 var shiftxy;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
590 var c;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
591
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
592 mtx = this._get_ac_rev();
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
593 shiftxy = _shift_transform(xdiff, ydiff, mtx);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
594
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
595 c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
596 if(c.type != "coord")
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
597 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
598
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
599 c[2] += shiftxy[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
600 c[5] += shiftxy[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
601
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
602 this._x = x;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
603 this._y = y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
604 },
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 /*! \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
607 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
608 move_pnt: function(pnt) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
609 this.move(pnt.x, pnt.y);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
610 },
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 /*! \brief Prevent user to modify value.
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
613 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
614 get x() { return this._x; },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
615
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
616 /*! \brief Prevent user to modify value.
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
617 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
618 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
619
936
a9abcdac0ae5 Fix issue of moving lightbar of testsvg.js.
Thinker K.F. Li <thinker@codemud.net>
parents: 928
diff changeset
620 /*! \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
621 */
857
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
622 get rel() {
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
623 var rev;
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
624 var xy;
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
625
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
626 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
627 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
628
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
629 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
630 },
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
631 };
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
632
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
633 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
634 var a;
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
635 var vstr;
808
9b6c26cf9102 Move bounding box and center back to an object
Thinker K.F. Li <thinker@codemud.net>
parents: 807
diff changeset
636 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
637 var orig;
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
638
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
639 a = node.attr("bbox-x");
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
640 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
641 return 0;
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
642
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
643 /* 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
644 * 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
645 */
808
9b6c26cf9102 Move bounding box and center back to an object
Thinker K.F. Li <thinker@codemud.net>
parents: 807
diff changeset
646 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
647 bbox.orig = orig = new Object();
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
648 bbox.owner = tgt;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
649 bbox.__proto__ = _bbox_proto;
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
650 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
651 orig.x = parseFloat(vstr);
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
652
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
653 a = node.attr("bbox-y");
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
654 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
655 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
656
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
657 a = node.attr("bbox-width");
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
658 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
659 orig.width = parseFloat(vstr);
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
660
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
661 a = node.attr("bbox-height");
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
662 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
663 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
664 orig.y -= orig.height;
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
665
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
666 bbox.update();
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
667
861
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
668 /* 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
669 * 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
670 * 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
671 */
808
9b6c26cf9102 Move bounding box and center back to an object
Thinker K.F. Li <thinker@codemud.net>
parents: 807
diff changeset
672 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
673 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
674
861
e69f551e4a37 Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents: 857
diff changeset
675 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
676 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
677 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
678 if(a) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
679 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
680 orig.x += parseFloat(vstr);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
681 a = node.attr("transform-center-y");
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
682 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
683 orig.y -= parseFloat(vstr);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
684 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
685 center.__proto__ = _center_proto;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
686 center.owner = tgt;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
687 center.update();
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
688
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
689 return 1;
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
690 }
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
691
882
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
692 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
693 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
694 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
695 var stroke_alpha = 1;
877
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
696 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
697 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
698 var stroke_color;
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
699 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
700 var i;
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
701
877
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
702 if(style) {
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
703 if('opacity' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
704 alpha = parseFloat(style['opacity']);
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
705 if('fill' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
706 fill_color = style['fill'];
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
707 if('fill-opacity' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
708 fill_alpha = parseFloat(style['fill-opacity']);
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
709 if('stroke' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
710 stroke_color = style['stroke'];
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
711 if('stroke-width' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
712 stroke_width = parseFloat(style['stroke-width']);
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
713 if('stroke-opacity' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
714 stroke_alpha = parseFloat(style['stroke-opacity']);
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
715 if('display' in style && style['display'] == 'none')
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
716 return;
717
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
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 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
720 if(fill_color != "none") {
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
721 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
722 paint.fill(tgt);
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
723 }
717
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
724 }
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
725 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
726 if(stroke_color != "none") {
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
727 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
728 paint.stroke(tgt);
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
729 }
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
730 }
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
731
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
732 tgt.stroke_width = stroke_width;
888
143ac14c3ce9 Set opacity for a path.
Thinker K.F. Li <thinker@codemud.net>
parents: 883
diff changeset
733
143ac14c3ce9 Set opacity for a path.
Thinker K.F. Li <thinker@codemud.net>
parents: 883
diff changeset
734 if(alpha < 1)
143ac14c3ce9 Set opacity for a path.
Thinker K.F. Li <thinker@codemud.net>
parents: 883
diff changeset
735 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
736 };
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
737
882
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
738 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
739 var style;
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
740
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
741 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
742 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
743 };
d9d55bb50679 Parse color and stroke width of tspan object correctly.
Thinker K.F. Li <thinker@codemud.net>
parents: 881
diff changeset
744
880
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
745 function formalize_path_data(d) {
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
746 var posM, posm;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
747 var pos;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
748 var nums = "0123456789+-.";
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
749 var rel = false;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
750 var cmd;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
751
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
752 posM = d.search("M");
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 pos = posm < posM? posm: posM;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
755 if(pos == -1)
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
756 pos = posM == -1? posm: posM;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
757 if(pos == -1)
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
758 return d;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
759
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
760 if(posm == pos)
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
761 rel = true;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
762
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
763 pos = pos + 1;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
764 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
765 pos++;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
766 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
767 pos++;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
768 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
769 pos++;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
770 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
771 pos++;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
772 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
773 pos++;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
774 if(nums.search(d[pos]) >= 0) {
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
775 if(rel)
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
776 cmd = "l";
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
777 else
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
778 cmd = "L";
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
779 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
780 }
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
781 return d;
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
782 }
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
783
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
784 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
785 {
880
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
786 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
787 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
788 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
789 var pcoord = this.mb_rt.coord_new(coord);
880
ac3e8492ad74 Formalize path data for MadButterfly.
Thinker K.F. Li <thinker@codemud.net>
parents: 879
diff changeset
790
888
143ac14c3ce9 Set opacity for a path.
Thinker K.F. Li <thinker@codemud.net>
parents: 883
diff changeset
791 guessPathBoundingBox(pcoord,d);
143ac14c3ce9 Set opacity for a path.
Thinker K.F. Li <thinker@codemud.net>
parents: 883
diff changeset
792 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
793 this._set_paint(n, path);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
794 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
795
888
143ac14c3ce9 Set opacity for a path.
Thinker K.F. Li <thinker@codemud.net>
parents: 883
diff changeset
796 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
797 };
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
798
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
799 loadSVG.prototype.parseText=function(accu,coord,id, n)
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
800 {
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
801 var x = getInteger(n,'x');
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
802 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
803 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
804 var style;
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
805
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
806 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
807 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
808 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
809 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
810 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
811 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
812 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
813 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
814 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
815 }
879
44f46d6873be Set paint for tspan correctly
Thinker K.F. Li <thinker@codemud.net>
parents: 878
diff changeset
816 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
817 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
818 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
819 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
820 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
821 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
822 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
823 } 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
824 }
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 }
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
826 this._set_bbox(n, tcoord);
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
827
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
828 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
829 };
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
830
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
831
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
832 function multiply(s,d) {
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
833 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
834 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
835 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
836 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
837 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
838 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
839 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
840 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
841 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
842 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
843 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
844 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
845 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
846 };
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
847
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
848 function parseTransform(coord, s)
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
849 {
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
850 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
851 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
852 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
853 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
854 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
855 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
856 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
857 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
858 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
859 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
860 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
861 }
a47431293043 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 }
a47431293043 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 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
864 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
865 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
866 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
867 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
868 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
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 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
871 if (off != -1) {
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
872 var 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
873 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
874 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
875 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
876 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
877 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
878 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
879 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
880 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
881 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
882 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
883 }
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
884 }
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
885
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
886 loadSVG.prototype.parseRect=function(accu_matrix,coord, id, n)
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
887 {
703
3457519e3b9c Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents: 647
diff changeset
888 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
889 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
890 var rx,ry;
703
3457519e3b9c Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents: 647
diff changeset
891 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
892 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
893 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
894 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
895 var tcoord = this.mb_rt.coord_new(coord);
703
3457519e3b9c Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents: 647
diff changeset
896
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
897 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
898
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
899 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
900 parseTransform(tcoord,trans.value());
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
901
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
902 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
903 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
904 this._set_paint(n, rect);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
905 this._set_bbox(n, tcoord);
788
7ec13634c97d Add holder for animate
Thinker K.F. Li <thinker@codemud.net>
parents: 787
diff changeset
906
7ec13634c97d Add holder for animate
Thinker K.F. Li <thinker@codemud.net>
parents: 787
diff changeset
907 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
908 };
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
909
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
910 // 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
911 // 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
912 // 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
913 // 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
914 // 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
915 // 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
916 //
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
917 // 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
918 // 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
919
810
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
920 function parseGroupStyle(style,n)
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
921 {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
922 var attr;
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
923 if (n) {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
924 attr = n.attr('style');
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
925 } else {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
926 attr = null;
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
927 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
928 if (attr == null) {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
929 return;
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
930 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
931 var f = attr.value().split(';');
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
932
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
933 for(i in f) {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
934 var kv = f[i].split(':');
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
935 if (kv[0] == 'opacity') {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
936 style.opacity = parseFloat(kv[1]);
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
937 } else {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
938 sys.puts("Unknown style: "+kv[0]);
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
939 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
940 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
941 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
942
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
943 loadSVG.prototype.parseGroup=function(accu_matrix,root, group_id, n) {
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
944 var k;
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
945 var nodes = n.childNodes();
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
946 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
947 // 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
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 accu=[1,0,0,0,1,0];
810
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
950 var style;
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
951
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
952 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
953 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
954 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
955 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
956 parseTransform(coord, trans.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
957 }
a47431293043 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 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
959 multiply(accu,coord);
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
960
810
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
961 style = {};
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
962 parseGroupStyle(style, n);
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
963 if(style.opacity) {
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
964 sys.puts("opacity=" + style.opacity);
830
2a73ff24c141 Use accessor to replace the method to setup the opacity
wycc
parents: 810
diff changeset
965 coord.opacity=style.opacity;
810
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
966 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
967
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
968 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
969 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
970 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
971 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
972 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
973 id = attr.value();
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
974 }
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
975 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
976 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
977 } 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
978 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
979 } 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
980 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
981 } 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
982 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
983 } 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
984 this.parseImage(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
985 }
a47431293043 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 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
987 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
988 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
989 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
990 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
991
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
992 this._set_bbox(n, coord);
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
993
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
994 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
995 };
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
996
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
997 loadSVG.prototype.parseImage=function(accu,coord,id, n)
646
3a1e80de44ff Add image support
wycc
parents: 632
diff changeset
998 {
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
999 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
1000 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
1001 var trans = n.attr('transform');
646
3a1e80de44ff Add image support
wycc
parents: 632
diff changeset
1002
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
1003 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
1004 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
1005 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
1006 } 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
1007 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
1008 } 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
1009 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1010 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
1011 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
1012 var x,y,nx,ny;
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
1013 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
1014 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
1015 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
1016 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
1017 parseTransform(coord, trans.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
1018 }
646
3a1e80de44ff Add image support
wycc
parents: 632
diff changeset
1019
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
1020 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
1021 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
1022 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
1023 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
1024 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
1025 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
1026 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
1027 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
1028 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
1029 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
1030 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
1031 y = parseFloat(y.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
1032 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
1033 ny = tcoord[3]*x+tcoord[4]*y+tcoord[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
1034 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
1035 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
1036 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
1037 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
1038 var img = this.mb_rt.image_new(x,y,w,h);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1039 var img_data = ldr.load(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
1040 var paint = this.mb_rt.paint_image_new(img_data);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1041 paint.fill(img);
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1042 tcoord.add_shape(img);
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
1043
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
1044 this._set_bbox(n, img);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
1045
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
1046 make_mbnames(this.mb_rt, n, img);
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
1047 };
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1048
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1049 function _parse_stops(n) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1050 var children;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1051 var child;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1052 var style;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1053 var color;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1054 var rgb;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1055 var opacity;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1056 var r, g, b, a;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1057 var offset_atr, offset;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1058 var stops = [];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1059 var i;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1060
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1061 children = n.childNodes();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1062 for(i = 0; i < children.length; i++) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1063 child = children[i];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1064 if(child.name() == "stop") {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1065 style = parse_style(child);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1066
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1067 color = style["stop-color"];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1068 if(color) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1069 rgb = parse_color(color);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1070 r = rgb[0];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1071 g = rgb[1];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1072 b = rgb[2];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1073 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1074
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1075 opacity = style["stop-opacity"];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1076 if(opacity)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1077 a = parseFloat(opacity);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1078 else
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1079 a = 1;
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1080
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1081 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
1082 if(offset_attr)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1083 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
1084 else
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1085 offset = 0;
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1086
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1087 stops.push([offset, r, g, b, a]);
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1088 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1089 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1090
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1091 return stops;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1092 };
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1093
750
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
1094 loadSVG.prototype._MB_parseLinearGradient=function(root,n)
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
1095 {
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
1096 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
1097 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
1098 var nodes = n.childNodes();
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1099 var mtx = [1, 0, 0, 0, 1, 0];
750
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
1100
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
1101 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
1102 id = id.value();
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1103
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1104 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
1105 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
1106 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
1107 var y2 = n.attr("y2");
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1108 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
1109 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
1110 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
1111 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
1112 var r,g,b;
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1113
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1114 if(x1)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1115 x1 = parseFloat(x1.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1116 if(x2)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1117 x2 = parseFloat(x2.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1118 if(y1)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1119 y1 = parseFloat(y1.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1120 if(y2)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1121 y2 = parseFloat(y2.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1122
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1123 stops = _parse_stops(n);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1124
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
1125 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
1126 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
1127 href = href.value();
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1128 var hrefid = href.substring(1);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1129 pstops = this.stop_ref[hrefid];
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1130 if (pstops)
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1131 stops = pstops.concat(stops);
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1132
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1133 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
1134 if(typeof x1 == "undefined")
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1135 x1 = hrefgr[0];
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1136 if(typeof y1 == "undefined")
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1137 y1 = hrefgr[1];
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1138 if(typeof x2 == "undefined")
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1139 x2 = hrefgr[2];
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1140 if(typeof y2 == "undefined")
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1141 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
1142 }
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1143
881
a17c4e231e54 Transform positions of radient paints.
Thinker K.F. Li <thinker@codemud.net>
parents: 880
diff changeset
1144 if(n.attr("gradientTransform")) {
a17c4e231e54 Transform positions of radient paints.
Thinker K.F. Li <thinker@codemud.net>
parents: 880
diff changeset
1145 parseTransform(mtx, n.attr("gradientTransform").value());
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1146 xy = _pnt_transform(x1, y1, mtx);
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1147 x1 = xy[0];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1148 y1 = xy[1];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1149 xy = _pnt_transform(x2, y2, mtx);
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1150 x2 = xy[0];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1151 y2 = xy[1];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1152 }
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1153
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
1154 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
1155 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
1156 };
750
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
1157
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1158 loadSVG.prototype._MB_parseRadialGradient = function(root,n) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1159 var stops;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1160 var cx, cy;
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1161 var xy;
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1162 var mtx = [1, 0, 0, 0, 1, 0];
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1163 var id;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1164 var href;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1165 var r;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1166
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1167 id = n.attr("id");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1168 if(!id)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1169 throw "Require an id";
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1170 id = id.value();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1171
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1172 stops = _parse_stops(n);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1173
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1174 cx = n.attr("cx");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1175 if(!cx)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1176 throw "Miss cx attribute";
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1177 cy = n.attr("cy");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1178 if(!cy)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1179 throw "Miss cy attribute";
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1180 cx = parseFloat(cx.value());
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1181 cy = parseFloat(cy.value());
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1182
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1183 r = n.attr("r");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1184 if(!r)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1185 throw "Miss r attribute";
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1186 r = parseFloat(r.value());
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1187
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1188 href = n.attr("href");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1189 if(href) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1190 href = href.value().substring(1);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1191 stops = this.stop_ref[href];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1192 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1193
881
a17c4e231e54 Transform positions of radient paints.
Thinker K.F. Li <thinker@codemud.net>
parents: 880
diff changeset
1194 if(n.attr("gradientTransform")) {
a17c4e231e54 Transform positions of radient paints.
Thinker K.F. Li <thinker@codemud.net>
parents: 880
diff changeset
1195 parseTransform(mtx, n.attr("gradientTransform").value());
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1196 xy = _pnt_transform(cx, cy, mtx);
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1197 cx = xy[0];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1198 cy = xy[1];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1199 }
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1200
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1201 this.radials[id] = [cx, cy, r];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1202 this.stop_ref[id] = stops;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1203 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1204
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1205 loadSVG.prototype.parseScenes=function(coord,node) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1206 var nodes = node.childNodes();
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1207
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1208 for(k in nodes) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1209 var name = nodes[k].name();
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1210 if (name == 'scene') {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1211 var node = nodes[k];
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1212
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1213 scene = new Object();
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1214 scene.start = parseInt(node.attr('start').value());
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1215 try {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1216 scene.end = parseInt(node.attr('end').value());
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1217 } catch(e) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1218 scene.end = scene.start;
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1219 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1220 scene.ref = node.attr('ref').value();
1138
593a418ed8bf Add some stub for the animation.
wycc
parents: 978
diff changeset
1221 scene.type = node.attr('type').value();
978
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1222
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1223 try {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1224 this.scenenames[node.attr('name').value()] = scene.start;
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1225 } catch(e) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1226 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1227 this.scenes.push(scene);
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1228 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1229 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1230 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1231
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1232 loadSVG.prototype.parseMetadata=function(coord,node) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1233 var nodes = node.childNodes();
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1234
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1235 for(k in nodes) {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1236 var name = nodes[k].name();
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1237 if (name == 'scenes') {
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1238 this.scenes=[];
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1239 this.scenenames={};
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1240 this.parseScenes(coord,nodes[k]);
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1241 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1242 }
78312b44f48c Implement Scene API.
wycc
parents: 936
diff changeset
1243 }
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1244 loadSVG.prototype.parseDefs=function(root,n)
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1245 {
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1246 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
1247 var nodes = n.childNodes();
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1248
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
1249 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
1250 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
1251 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
1252 this._MB_parseLinearGradient(root,nodes[k]);
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1253 } else if(name == "radialGradient") {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1254 this._MB_parseRadialGradient(root,nodes[k]);
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1255 }
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
1256 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1257 };
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1258
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1259