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