Mercurial > MadButterfly
annotate nodejs/svg.js @ 710:c93381320d6e
Fill shapes with black if with out any stroke and fill in the style
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Fri, 13 Aug 2010 18:23:44 +0800 |
parents | 920c9e6e4214 |
children | 54618e0cd36b |
rev | line source |
---|---|
624 | 1 var libxml = require('libxmljs'); |
2 var sys=require('sys'); | |
3 var mbfly = require("mbfly"); | |
4 var mb_rt = new mbfly.mb_rt(":0.0", 720,480); | |
646 | 5 var ldr = mbfly.img_ldr_new("."); |
709 | 6 var background = mb_rt.rect_new(0, 0, 720, 480, 0, 0); |
7 var paint = mb_rt.paint_color_new(1, 1, 1, 1); | |
8 paint.fill(background); | |
9 mb_rt.root.add_shape(background); | |
624 | 10 |
11 function MB_loadSVG(mb_rt,root,filename) { | |
12 var doc = libxml.parseXmlFile(filename); | |
13 var nodes = doc.root().childNodes(); | |
14 var coord = mb_rt.coord_new(root); | |
15 var k; | |
16 | |
17 for(k in nodes) { | |
18 var n = nodes[k].name(); | |
19 if (n == "defs") { | |
20 _MB_parseDefs(root,nodes[k]); | |
21 } else if (n == "g") { | |
22 _MB_parseGroup(root,'root_coord',nodes[k]); | |
23 } | |
24 } | |
25 } | |
26 | |
27 function getInteger(n,name) | |
28 { | |
29 if (n == null) return 0; | |
30 var a = n.attr(name); | |
31 if (a==null) return 0; | |
32 return parseInt(a.value()); | |
33 } | |
631 | 34 function parsePointSize(s) |
35 { | |
36 var fs=0; | |
37 var i; | |
624 | 38 |
631 | 39 for(i=0;i<s.length;i++) { |
40 if (s[i]<'0' || s[i] > '9') break; | |
41 fs = fs*10 + (s[i]-'0'); | |
42 } | |
43 return fs; | |
44 | |
45 } | |
46 | |
47 | |
48 function parseColor(c) | |
49 { | |
50 if (c[0] == '#') { | |
51 return parseInt(c.substring(1,3),16)<<16 | parseInt(c.substring(3,5),16)<<8 | parseInt(c.substring(5,7),16); | |
52 } | |
53 } | |
54 function parseTextStyle(style,n) | |
624 | 55 { |
625
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
56 var attr; |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
57 if (n) { |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
58 attr = n.attr('style'); |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
59 } else { |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
60 attr = null; |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
61 } |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
62 if (attr == null) { |
631 | 63 return; |
625
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
64 } |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
65 var f = attr.value().split(';'); |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
66 |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
67 for(i in f) { |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
68 var kv = f[i].split(':'); |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
69 if (kv[0] == 'font-size') { |
631 | 70 style.fs = parsePointSize(kv[1]); |
625
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
71 } else if (kv[0] == "font-style") { |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
72 } else if (kv[0] == "font-weight") { |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
73 } else if (kv[0] == "fill") { |
631 | 74 style.color = parseColor(kv[1]); |
625
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
75 } else if (kv[0] == "fill-opacity") { |
703
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
76 } else if (kv[0] == "stroke-opacity") { |
625
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
77 } else if (kv[0] == "stroke") { |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
78 } else if (kv[0] == "stroke-width") { |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
79 } else if (kv[0] == "stroke-linecap") { |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
80 } else if (kv[0] == "stroke-linejoin") { |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
81 } else if (kv[0] == "stroke-lineopacity") { |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
82 } else if (kv[0] == "font-family") { |
631 | 83 style.family = kv[1]; |
625
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
84 } else if (kv[0] == "font-stretch") { |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
85 } else if (kv[0] == "font-variant") { |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
86 } else if (kv[0] == "text-anchor") { |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
87 } else if (kv[0] == "text-align") { |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
88 } else if (kv[0] == "writing-mode") { |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
89 } else if (kv[0] == "line-height") { |
632 | 90 } else { |
625
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
91 sys.puts("Unknown style: "+kv[0]); |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
92 } |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
93 } |
624 | 94 } |
95 | |
631 | 96 function _MB_parseTSpan(coord, n,style) |
624 | 97 { |
98 var x = getInteger(n,'x'); | |
99 var y = getInteger(n,'y'); | |
100 var tcoord = mb_rt.coord_new(coord); | |
101 var nodes = n.childNodes(); | |
102 var k; | |
103 | |
104 sys.puts(n.text()); | |
105 var obj = mb_rt.stext_new(n.text(),x,y); | |
631 | 106 parseTextStyle(style,n); |
107 style.paint = mb_rt.paint_color_new(1,1,1,1); | |
108 style.face=mb_rt.font_face_query(style.family, 2, 100); | |
109 obj.set_style([[20,style.face,style.fs]]); | |
110 style.paint.fill(obj); | |
624 | 111 tcoord.add_shape(obj); |
112 for(k in nodes) { | |
113 var name = nodes[k].name(); | |
114 if (name == "tspan") { | |
115 _MB_parseTSpan(tcoord,nodes[k]); | |
116 } else { | |
117 } | |
118 } | |
119 } | |
120 | |
706 | 121 function _prepare_paint_color(color, alpha) { |
122 var paint; | |
123 | |
124 if (color[0]=='#') { | |
125 var r,g,b; | |
126 r = parseInt(color.substring(1,3),16)/256; | |
127 g = parseInt(color.substring(3,5),16)/256; | |
128 b = parseInt(color.substring(5,7),16)/256; | |
129 paint = mb_rt.paint_color_new(r, g, b, alpha); | |
130 } else { | |
131 paint = mb_rt.paint_color_new(0,0,0,1); | |
132 } | |
133 return paint; | |
134 } | |
135 | |
136 function _MB_parsePath(coord,id, n) | |
137 { | |
138 var d = n.attr('d').value(); | |
139 var style = n.attr('style'); | |
140 var path = mb_rt.path_new(d); | |
141 var paint; | |
142 | |
143 if (style==null) { | |
710
c93381320d6e
Fill shapes with black if with out any stroke and fill in the style
Thinker K.F. Li <thinker@branda.to>
parents:
709
diff
changeset
|
144 paint = mb_rt.paint_color_new(0,0,0,1); |
706 | 145 paint.stroke(path); |
146 } else { | |
147 var items = style.value().split(';'); | |
148 var fill_alpha = 1; | |
149 var stroke_alpha = 1; | |
150 var fill_color; | |
151 var stroke_color; | |
152 var alpha; | |
153 | |
154 for(i in items) { | |
155 sys.puts(items[i]); | |
156 var f = items[i].split(':'); | |
157 if (f[0] == 'opacity') { | |
158 alpha = f[1]; | |
159 } else if (f[0] == 'fill') { | |
160 if(f[1] != "none") | |
161 fill_color = f[1]; | |
162 } else if (f[0] == 'fill-opacity') { | |
163 fill_alpha = parseFloat(f[1]); | |
164 } else if (f[0] == 'stroke') { | |
165 if(f[1] != "none") | |
166 stroke_color = f[1]; | |
167 } else if (f[0] == 'stroke-width') { | |
168 path.stroke_width = parseFloat(f[1]); | |
169 } else if (f[0] == 'stroke-opacity') { | |
170 stroke_alpha = parseFloat(f[1]); | |
171 } | |
172 } | |
173 | |
174 if(fill_color) { | |
175 paint = _prepare_paint_color(fill_color, fill_alpha); | |
176 paint.fill(path); | |
177 } | |
178 if(stroke_color) { | |
179 paint = _prepare_paint_color(stroke_color, stroke_alpha); | |
180 paint.stroke(path); | |
181 } | |
710
c93381320d6e
Fill shapes with black if with out any stroke and fill in the style
Thinker K.F. Li <thinker@branda.to>
parents:
709
diff
changeset
|
182 if(!stroke_color && !fill_color) { |
c93381320d6e
Fill shapes with black if with out any stroke and fill in the style
Thinker K.F. Li <thinker@branda.to>
parents:
709
diff
changeset
|
183 paint = mb_rt.paint_color_new(0, 0, 0, 1); |
c93381320d6e
Fill shapes with black if with out any stroke and fill in the style
Thinker K.F. Li <thinker@branda.to>
parents:
709
diff
changeset
|
184 paint.fill(path); |
c93381320d6e
Fill shapes with black if with out any stroke and fill in the style
Thinker K.F. Li <thinker@branda.to>
parents:
709
diff
changeset
|
185 } |
706 | 186 |
187 } | |
188 coord.add_shape(path); | |
189 } | |
190 | |
624 | 191 function _MB_parseText(coord,id, n) |
192 { | |
193 var x = getInteger(n,'x'); | |
194 var y = getInteger(n,'y'); | |
195 var tcoord = mb_rt.coord_new(coord); | |
631 | 196 var style = new Object(); |
197 style.fs = 20; | |
198 style.family = 'courier'; | |
199 parseTextStyle(style,n); | |
624 | 200 var nodes = n.childNodes(); |
201 var k; | |
202 for(k in nodes) { | |
203 var n = nodes[k].name(); | |
204 if (n == "tspan") { | |
631 | 205 _MB_parseTSpan(tcoord,nodes[k],style); |
624 | 206 } else { |
207 } | |
208 } | |
209 | |
210 | |
211 } | |
212 | |
213 function parseTransform(coord, s) | |
214 { | |
215 var off = s.indexOf('translate'); | |
216 if (off != -1) { | |
217 var ss = s.substring(off+9); | |
218 for(i=0;i<ss.length;i++) { | |
219 if (ss[i] == '(') break; | |
220 } | |
221 ss = ss.substring(i+1); | |
222 for(i=0;i<ss.length;i++) { | |
223 if (ss[i] == ')') { | |
224 ss = ss.substring(0,i); | |
225 break; | |
226 } | |
227 } | |
228 var f = ss.split(','); | |
229 var x,y; | |
706 | 230 x = parseFloat(f[0]); |
231 y = parseFloat(f[1]); | |
232 coord[0] = 1; | |
233 coord[1] = 0; | |
234 coord[2] = x; | |
235 coord[3] = 0; | |
236 coord[4] = 1; | |
624 | 237 coord[5] = y; |
238 } | |
239 off = s.indexOf('matrix'); | |
240 if (off != -1) { | |
703
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
241 var end = s.indexOf(')'); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
242 var m = s.substring(7,end); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
243 var fields = m.split(','); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
244 coord[0] = parseFloat(fields[0]); |
706 | 245 coord[1] = parseFloat(fields[2]); |
703
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
246 coord[2] = parseFloat(fields[4]); |
706 | 247 coord[3] = parseFloat(fields[1]); |
703
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
248 coord[4] = parseFloat(fields[3]); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
249 coord[5] = parseFloat(fields[5]); |
624 | 250 } |
251 } | |
252 | |
253 function _MB_parseRect(coord, id, n) | |
254 { | |
703
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
255 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
|
256 var y = getInteger(n,'y'); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
257 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
|
258 var h = getInteger(n,'height'); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
259 var paint; |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
260 |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
261 var style = n.attr('style'); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
262 |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
263 if (style==null) { |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
264 paint = mb_rt.paint_color_new(0,0,0,0.1); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
265 } else { |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
266 var items = style.value().split(';'); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
267 var fill = ''; |
708
ac9c20db953e
Default alpha of a tag is '1'
Thinker K.F. Li <thinker@branda.to>
parents:
706
diff
changeset
|
268 var alpha = 1; |
703
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
269 for(i in items) { |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
270 sys.puts(items[i]); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
271 var f = items[i].split(':'); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
272 if (f[0] == 'opacity') { |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
273 alpha = f[1]; |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
274 } else if (f[0] == 'fill') { |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
275 fill = f[1]; |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
276 } else if (f[0] == 'fill-opacity') { |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
277 } else if (f[0] == 'stroke') { |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
278 } else if (f[0] == 'stroken-width') { |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
279 } else if (f[0] == 'stroke-opacity') { |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
280 } |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
281 } |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
282 sys.puts("fill="+fill); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
283 if (fill[0]=='#') { |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
284 var r,g,b; |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
285 r = parseInt(fill.substring(1,3),16)/256; |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
286 g = parseInt(fill.substring(3,5),16)/256; |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
287 b = parseInt(fill.substring(5,7),16)/256; |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
288 sys.puts("r="+r+" g="+g+" b="+b+" a="+alpha); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
289 |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
290 paint = mb_rt.paint_color_new(r,g,b,parseFloat(alpha)); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
291 } else { |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
292 paint = mb_rt.paint_color_new(0,0,0,1); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
293 } |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
294 } |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
295 var rect = mb_rt.rect_new(x,y,w,h,10, 10); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
296 sys.puts("rect x="+x+" y="+y+" w="+w+" h="+h); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
297 paint.fill(rect); |
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
298 coord.add_shape(rect); |
624 | 299 } |
300 | |
301 function _MB_parseGroup(root, group_id, n) | |
302 { | |
303 var k; | |
304 var nodes = n.childNodes(); | |
305 var coord = mb_rt.coord_new(root); | |
306 // Parse the transform and style here | |
307 var trans = n.attr('transform'); | |
308 if (trans!=null) { | |
309 parseTransform(coord, trans.value()); | |
310 } | |
311 | |
312 for(k in nodes) { | |
313 var n = nodes[k].name(); | |
314 var attr = nodes[k].attr('id'); | |
315 var id; | |
316 if (attr) { | |
317 id = attr.value(); | |
318 } | |
319 if (n == "g") { | |
320 _MB_parseGroup(coord, id, nodes[k]); | |
706 | 321 } else if (n == "path") { |
322 _MB_parsePath(coord, id, nodes[k]); | |
624 | 323 } else if (n == "text") { |
324 _MB_parseText(coord, id, nodes[k]); | |
325 } else if (n == "rect") { | |
326 _MB_parseRect(coord, id, nodes[k]); | |
646 | 327 } else if (n == "image") { |
328 _MB_parseImage(coord, id, nodes[k]); | |
624 | 329 } |
330 } | |
331 | |
332 } | |
333 | |
646 | 334 function _MB_parseImage(coord,id, n) |
335 { | |
336 sys.puts("---> image"); | |
337 var ref = n.attr('href').value(); | |
338 | |
339 if (ref == null) return; | |
340 sys.puts(ref); | |
647 | 341 if (ref.substr(0,7) == "file://") { |
342 ref = ref.substring(7); | |
343 } else if (ref.substr(0,5)=="file:") { | |
344 ref = ref.substring(5); | |
345 } else { | |
646 | 346 return; |
347 } | |
348 sys.puts("Load image "+ref); | |
349 var w; | |
350 var h; | |
351 var x,y; | |
352 | |
353 w = n.attr("width"); | |
354 if (w == null) return; | |
355 w = parseInt(w.value()); | |
356 h = n.attr("height"); | |
357 if (h == null) return; | |
358 h = parseInt(h.value()); | |
359 x = n.attr("x"); | |
360 if (x == null) return; | |
361 x = parseInt(x.value()); | |
362 y = n.attr("y"); | |
363 if (y == null) return; | |
364 y = parseInt(y.value()); | |
365 sys.puts("x="+x+",y="+y+",w="+w+",h="+h); | |
366 var img = mb_rt.image_new(x,y,w,h); | |
367 var img_data = ldr.load(ref); | |
368 sys.puts(img_data); | |
369 var paint = mb_rt.paint_image_new(img_data); | |
370 paint.fill(img); | |
371 coord.add_shape(img); | |
372 } | |
624 | 373 |
374 function _MB_parseDefs(root,n) | |
375 { | |
376 var k; | |
377 var nodes = n.childNodes(); | |
378 | |
379 for(k in nodes) { | |
380 var name = nodes[k].name(); | |
381 if (name == "linearGradient") { | |
382 //_MB_parseLinearGradient(root,nodes[k]); | |
383 } | |
384 } | |
385 } | |
386 | |
387 | |
388 MB_loadSVG(mb_rt,mb_rt.root,"test.svg"); | |
389 mb_rt.redraw_all(); | |
704
d950487bd9f9
Flush mb_rt, immediately, after redraw_all()
Thinker K.F. Li <thinker@branda.to>
parents:
703
diff
changeset
|
390 mb_rt.flush(); |