Mercurial > MadButterfly
annotate nodejs/svg.js @ 787:0899dcac441c
Set bounding box attributes for JS
Parse inkscape:bbox-x/y/width/height to
- bbox_x
- bbox_y
- bbox_width
- bbox_height
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Tue, 31 Aug 2010 01:26:22 +0800 |
parents | b6d9c42019d1 |
children | 7ec13634c97d |
rev | line source |
---|---|
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
1 // -*- indent-tabs-mode: t; tab-width: 4; 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 | |
714 | 15 exports.loadSVG=function(mb_rt,root,filename) { |
718
0cd59ce76e67
Refactor loadSVG as a class
Thinker K.F. Li <thinker@branda.to>
parents:
717
diff
changeset
|
16 return new loadSVG(mb_rt, root, filename); |
0cd59ce76e67
Refactor loadSVG as a class
Thinker K.F. Li <thinker@branda.to>
parents:
717
diff
changeset
|
17 }; |
0cd59ce76e67
Refactor loadSVG as a class
Thinker K.F. Li <thinker@branda.to>
parents:
717
diff
changeset
|
18 |
784
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
783
diff
changeset
|
19 |
718
0cd59ce76e67
Refactor loadSVG as a class
Thinker K.F. Li <thinker@branda.to>
parents:
717
diff
changeset
|
20 function loadSVG(mb_rt, root, filename) { |
624 | 21 var doc = libxml.parseXmlFile(filename); |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
22 var _root = doc.root(); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
23 var nodes = _root.childNodes(); |
624 | 24 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
|
25 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
|
26 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
|
27 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
|
28 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
|
29 this.gradients={}; |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
30 root.center=new Object(); |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
31 root.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
|
32 root.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
|
33 |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
34 if(_root.attr("width")) { |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
35 k = _root.attr("width").value(); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
36 this.width = parseFloat(k); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
37 } |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
38 if(_root.attr("height")) { |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
39 k = _root.attr("height").value(); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
40 this.height = parseFloat(k); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
41 } |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
42 |
624 | 43 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
|
44 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
|
45 if (n == "defs") { |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
46 this.parseDefs(root,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
|
47 } else if (n == "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
|
48 this.parseGroup(accu,root,'root_coord',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
|
49 } |
624 | 50 } |
51 } | |
52 | |
719
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
53 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
|
54 var mbname; |
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
55 var name; |
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
56 |
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
57 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
|
58 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
|
59 |
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
60 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
|
61 if(mbname) { |
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
62 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
|
63 mb_rt.mbnames[name] = obj; |
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
64 } |
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
65 } |
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
66 |
624 | 67 function getInteger(n,name) |
68 { | |
69 if (n == null) return 0; | |
70 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
|
71 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
|
72 return parseInt(a.value()); |
624 | 73 } |
719
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
74 |
631 | 75 function parsePointSize(s) |
76 { | |
77 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
|
78 var i; |
624 | 79 |
783
a47431293043
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 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
|
81 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
|
82 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
|
83 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
84 return fs; |
631 | 85 |
86 } | |
87 | |
88 function parseColor(c) | |
89 { | |
90 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
|
91 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
|
92 } |
631 | 93 } |
719
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
94 |
631 | 95 function parseTextStyle(style,n) |
624 | 96 { |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
97 var attr; |
625
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
98 if (n) { |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
99 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
|
100 } 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
|
101 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
|
102 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
103 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
|
104 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
|
105 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
106 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
|
107 |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
108 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
|
109 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
|
110 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
|
111 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
|
112 } 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
|
113 } 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
|
114 } 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
|
115 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
|
116 } 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
|
117 } 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
|
118 } 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
|
119 } 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
|
120 } 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
|
121 } 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
|
122 } 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
|
123 } 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
|
124 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
|
125 } 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
|
126 } 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
|
127 } 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
|
128 } 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
|
129 } 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
|
130 } 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
|
131 } 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
|
132 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
|
133 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
134 } |
624 | 135 } |
732
6879aa403306
Add set_text to the coordinate of the coord_t of the text.
wycc
parents:
720
diff
changeset
|
136 function tspan_set_text(text) |
6879aa403306
Add set_text to the coordinate of the coord_t of the text.
wycc
parents:
720
diff
changeset
|
137 { |
783
a47431293043
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 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
|
139 } |
624 | 140 |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
141 loadSVG.prototype.parseTSpan = function(coord, n,style) { |
624 | 142 var x = getInteger(n,'x'); |
143 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
|
144 var tcoord = this.mb_rt.coord_new(coord); |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
145 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
|
146 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
|
147 |
714 | 148 var obj = this.mb_rt.stext_new(n.text(),x,y); |
631 | 149 parseTextStyle(style,n); |
714 | 150 style.paint = this.mb_rt.paint_color_new(1,1,1,1); |
151 style.face=this.mb_rt.font_face_query(style.family, 2, 100); | |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
152 obj.set_style([[20,style.face,style.fs]]); |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
153 style.paint.fill(obj); |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
154 tcoord.add_shape(obj); |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
155 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
|
156 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
|
157 if (name == "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
|
158 this.parseTSpan(tcoord,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
|
159 } 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
|
160 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
161 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
162 tcoord.set_text=tspan_set_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
|
163 tcoord.text = obj; |
719
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
164 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
|
165 }; |
624 | 166 |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
167 loadSVG.prototype._prepare_paint_color = function(color, alpha) { |
706 | 168 var paint; |
713 | 169 var c; |
706 | 170 |
171 if (color[0]=='#') { | |
172 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
|
173 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
|
174 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
|
175 b = parseInt(color.substring(5,7),16)/255; |
714 | 176 paint = this.mb_rt.paint_color_new(r, g, b, alpha); |
713 | 177 } else if(_std_colors[color]) { |
178 c = _std_colors[color]; | |
714 | 179 paint = this.mb_rt.paint_color_new(c[0], c[1], c[2], alpha); |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
180 } else if (fill.substring(0,3) == 'url') { |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
181 var id = fill.substring(5,fill.length-1); |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
182 var gr = this.gradients[id]; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
183 paint = this.mb_rt.paint_linear_new(gr[0],gr[1],gr[2],gr[3]); |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
184 paint.set_stops(this.stop_ref[id]); |
706 | 185 } else { |
714 | 186 paint = this.mb_rt.paint_color_new(0,0,0,1); |
706 | 187 } |
188 return paint; | |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
189 }; |
783
a47431293043
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 |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
191 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
|
192 { |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
193 return; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
194 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
|
195 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
|
196 var pair; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
197 var i; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
198 var minx,miny; |
759 | 199 |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
200 minx = 10000; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
201 miny = 10000; |
759 | 202 |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
203 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
|
204 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
|
205 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
|
206 switch(type) { |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
207 case 'm': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
208 case 'l': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
209 case 'a': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
210 case 'x': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
211 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
|
212 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
|
213 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
|
214 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
|
215 i++; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
216 } 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
|
217 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
|
218 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
|
219 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
|
220 } |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
221 break; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
222 case 'q': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
223 // Implement this latter |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
224 break; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
225 case 'c': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
226 // Implement this latter |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
227 break; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
228 case 's': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
229 // Implement this latter |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
230 break; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
231 case 'h': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
232 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
|
233 break; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
234 case 'v': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
235 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
|
236 break; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
237 default: |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
238 continue; |
759 | 239 } |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
240 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
|
241 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
|
242 } |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
243 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
|
244 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
|
245 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
|
246 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
|
247 }; |
759 | 248 |
249 | |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
250 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
|
251 var a; |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
252 var vstr; |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
253 |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
254 a = node.attr("bbox-x"); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
255 if(!a) |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
256 return; |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
257 |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
258 vstr = a.value(); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
259 tgt.bbox_x = parseFloat(vstr); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
260 |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
261 a = node.attr("bbox-y"); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
262 vstr = a.value(); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
263 tgt.bbox_y = this.height - parseFloat(vstr); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
264 |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
265 a = node.attr("bbox-width"); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
266 vstr = a.value(); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
267 tgt.bbox_width = parseFloat(vstr); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
268 |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
269 a = node.attr("bbox-height"); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
270 vstr = a.value(); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
271 tgt.bbox_height = parseFloat(vstr); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
272 |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
273 tgt.center_x = tgt.bbox_width / 2 + tgt.bbox_x; |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
274 a = node.attr("transform-center-x"); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
275 if(a) { |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
276 vstr = a.value(); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
277 tgt.center_x += parseFloat(vstr); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
278 } |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
279 |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
280 tgt.center_y = tgt.bbox_height / 2 + tgt.bbox_y; |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
281 a = node.attr("transform-center-y"); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
282 if(a) { |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
283 vstr = a.value(); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
284 tgt.center_y -= parseFloat(vstr); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
285 } |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
286 } |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
287 |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
288 loadSVG.prototype._set_paint = function(node, tgt) { |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
289 var style = node.attr('style'); |
706 | 290 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
|
291 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
|
292 var stroke_alpha = 1; |
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
293 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
|
294 var stroke_color; |
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
295 var black_paint; |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
296 var i; |
706 | 297 |
717
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
298 if(style != null) { |
706 | 299 var items = style.value().split(';'); |
300 var alpha; | |
301 | |
302 for(i in items) { | |
303 var f = items[i].split(':'); | |
304 if (f[0] == 'opacity') { | |
305 alpha = f[1]; | |
306 } else if (f[0] == 'fill') { | |
717
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
307 fill_color = f[1]; |
706 | 308 } else if (f[0] == 'fill-opacity') { |
309 fill_alpha = parseFloat(f[1]); | |
310 } else if (f[0] == 'stroke') { | |
717
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
311 stroke_color = f[1]; |
706 | 312 } else if (f[0] == 'stroke-width') { |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
313 tgt.stroke_width = parseFloat(f[1]); |
706 | 314 } else if (f[0] == 'stroke-opacity') { |
315 stroke_alpha = parseFloat(f[1]); | |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
316 } else if (f[0] == 'display') { |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
317 if(f[1] == 'none') |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
318 return; |
706 | 319 } |
320 } | |
321 | |
717
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
322 } |
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
323 |
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
324 if(!fill_color || !stroke_color) |
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
325 black_paint = this.mb_rt.paint_color_new(0, 0, 0, 1); |
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
326 |
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
327 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
|
328 if(fill_color != "none") { |
714 | 329 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
|
330 paint.fill(tgt); |
706 | 331 } |
717
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
332 } else { |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
333 black_paint.fill(tgt); |
717
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
334 } |
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
335 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
|
336 if(stroke_color != "none") { |
714 | 337 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
|
338 paint.stroke(tgt); |
706 | 339 } |
717
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
340 } else { |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
341 black_paint.stroke(tgt); |
706 | 342 } |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
343 }; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
344 |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
345 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
|
346 { |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
347 var d = n.attr('d').value(); |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
348 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
|
349 var path = this.mb_rt.path_new(d); |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
350 |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
351 guessPathBoundingBox(coord,d); |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
352 this._set_bbox(n, path); |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
353 this._set_paint(n, path); |
706 | 354 coord.add_shape(path); |
719
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
355 |
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
356 make_mbnames(this.mb_rt, n, path); |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
357 }; |
706 | 358 |
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
|
359 loadSVG.prototype.parseText=function(accu,coord,id, n) |
624 | 360 { |
361 var x = getInteger(n,'x'); | |
362 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
|
363 var tcoord = this.mb_rt.coord_new(coord); |
631 | 364 var style = new Object(); |
759 | 365 |
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
|
366 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
|
367 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
|
368 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
|
369 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
|
370 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
371 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
|
372 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
|
373 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
|
374 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
|
375 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
376 style.fs = 20; |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
377 style.family = 'courier'; |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
378 parseTextStyle(style,n); |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
379 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
|
380 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
|
381 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
|
382 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
|
383 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
|
384 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
|
385 } 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
|
386 } |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
387 } |
624 | 388 |
719
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
389 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
|
390 }; |
624 | 391 |
759 | 392 |
393 function multiply(s,d) { | |
394 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
|
395 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
|
396 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
|
397 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
|
398 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
|
399 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
|
400 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
|
401 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
|
402 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
|
403 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
|
404 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
|
405 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
|
406 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
|
407 }; |
759 | 408 |
624 | 409 function parseTransform(coord, s) |
410 { | |
411 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
|
412 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
|
413 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
|
414 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
|
415 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
|
416 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
417 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
|
418 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
|
419 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
|
420 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
|
421 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
|
422 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
423 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
424 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
|
425 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
|
426 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
|
427 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
|
428 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
|
429 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
|
430 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
431 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
|
432 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
|
433 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
|
434 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
|
435 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
|
436 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
|
437 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
|
438 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
|
439 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
|
440 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
|
441 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
|
442 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
|
443 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
|
444 } |
624 | 445 } |
446 | |
759 | 447 loadSVG.prototype.parseRect=function(accu_matrix,coord, id, n) |
624 | 448 { |
703
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
449 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
|
450 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
|
451 var rx,ry; |
703
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
452 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
|
453 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
|
454 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
|
455 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
|
456 var tcoord = this.mb_rt.coord_new(coord); |
703
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
457 |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
458 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
|
459 |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
460 if (trans) { |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
461 parseTransform(tcoord,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
|
462 //var m = [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
|
463 //multiply(m,tcoord); |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
464 rx = 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
|
465 ry = 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
|
466 } |
759 | 467 |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
468 if (coord.center.x > rx) |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
469 coord.center.x = rx; |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
470 if (coord.center.y > ry) |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
471 coord.center.y = ry; |
759 | 472 |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
473 var rect = this.mb_rt.rect_new(x,y,w,h,10, 10); |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
474 this._set_paint(n, rect); |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
475 this._set_bbox(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
|
476 tcoord.add_shape(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
|
477 }; |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
478 |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
479 // 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
|
480 // 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
|
481 // 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
|
482 // 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
|
483 // 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
|
484 // 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
|
485 // |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
486 // 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
|
487 // 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
|
488 |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
489 loadSVG.prototype.parseGroup=function(accu_matrix,root, group_id, n) { |
624 | 490 var k; |
491 var nodes = n.childNodes(); | |
714 | 492 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
|
493 // 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
|
494 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
|
495 var accu=[1,0,0,0,1,0]; |
759 | 496 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
|
497 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
|
498 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
|
499 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
|
500 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
|
501 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
502 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
|
503 multiply(accu,coord); |
624 | 504 |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
505 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
|
506 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
|
507 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
|
508 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
|
509 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
|
510 id = attr.value(); |
624 | 511 } |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
512 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
|
513 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
|
514 } 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
|
515 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
|
516 } 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
|
517 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
|
518 } 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
|
519 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
|
520 } 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
|
521 this.parseImage(accu_matrix,coord, id, nodes[k]); |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
522 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
523 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
524 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
|
525 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
|
526 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
|
527 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
|
528 |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
529 this._set_bbox(n, coord); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
530 |
719
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
531 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
|
532 }; |
624 | 533 |
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
|
534 loadSVG.prototype.parseImage=function(accu,coord,id, n) |
646 | 535 { |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
536 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
|
537 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
|
538 var trans = n.attr('transform'); |
646 | 539 |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
540 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
|
541 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
|
542 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
|
543 } 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
|
544 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
|
545 } 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
|
546 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
|
547 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
548 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
|
549 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
|
550 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
|
551 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
|
552 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
|
553 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
|
554 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
|
555 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
|
556 } |
646 | 557 |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
558 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
|
559 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
|
560 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
|
561 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
|
562 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
|
563 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
|
564 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
|
565 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
|
566 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
|
567 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
|
568 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
|
569 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
|
570 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
|
571 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
|
572 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
|
573 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
|
574 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
|
575 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
|
576 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
|
577 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
|
578 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
|
579 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
|
580 tcoord.add_shape(img); |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
581 |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
582 this._set_bbox(n, img); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
583 |
719
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
584 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
|
585 }; |
624 | 586 |
750 | 587 loadSVG.prototype._MB_parseLinearGradient=function(root,n) |
588 { | |
589 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
|
590 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
|
591 var nodes = n.childNodes(); |
750 | 592 |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
593 if (id == 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
|
594 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
|
595 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
|
596 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
|
597 var y2 = n.attr("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
|
598 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
|
599 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
|
600 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
|
601 var r,g,b; |
750 | 602 stops=[]; |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
603 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
|
604 var ss = 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
|
605 if (ss.name()=="stop") { |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
606 var style = ss.attr("style").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
|
607 var items = style.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
|
608 var off = parseInt(ss.attr('offset').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
|
609 color = 'black'; |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
610 opacity = 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
|
611 for (i in items) { |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
612 it = items[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
|
613 var f = it.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
|
614 k = 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
|
615 v = 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
|
616 if (k == 'stop-color') { |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
617 color = v.substring(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
|
618 if (v == 'white') { |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
619 r = 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
|
620 g = 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
|
621 b = 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
|
622 } else if (v == 'black') { |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
623 r = 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
|
624 g = 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
|
625 b = 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
|
626 } 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
|
627 r = parseInt(color.substring(0,2),16)/255.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
|
628 g = parseInt(color.substring(2,4),16)/255.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
|
629 b = parseInt(color.substring(4,6),16)/255.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
|
630 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
631 } else if (k=='stop-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
|
632 opacity = parseFloat(v); |
750 | 633 } |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
634 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
635 stops.push([off, r,g,b,opacity]); |
750 | 636 } |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
637 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
638 var href = n.attr('href'); |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
639 if (href != 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
|
640 href = href.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
|
641 pstops = this.stop_ref[href.substring(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
|
642 stops = pstops.concat(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
|
643 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
644 id = id.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
|
645 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
|
646 if (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
|
647 x1 = parseFloat(x1.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
|
648 if (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
|
649 x2 = parseFloat(x2.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
|
650 if (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
|
651 y1 = parseFloat(y1.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
|
652 if (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
|
653 y2 = parseFloat(y2.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
|
654 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
|
655 }; |
750 | 656 |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
657 loadSVG.prototype.parseDefs=function(root,n) |
624 | 658 { |
659 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
|
660 var nodes = n.childNodes(); |
624 | 661 |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
662 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
|
663 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
|
664 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
|
665 this._MB_parseLinearGradient(root,nodes[k]); |
624 | 666 } |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
667 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
668 }; |
624 | 669 |
670 |