Mercurial > MadButterfly
annotate nodejs/svg.js @ 875:5d7c3c681851 abs_n_rel_center
Parse radial gradient
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Fri, 24 Sep 2010 23:55:02 +0800 |
parents | 881efcd8a18f |
children | e6936110c48f |
rev | line source |
---|---|
807
5723e5446b7c
Fix incorrect variable name
Thinker K.F. Li <thinker@codemud.net>
parents:
802
diff
changeset
|
1 // -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 4; -*- |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
2 // vim: sw=4:ts=8:sts=4 |
624 | 3 var libxml = require('libxmljs'); |
4 var sys=require('sys'); | |
5 var mbfly = require("mbfly"); | |
646 | 6 var ldr = mbfly.img_ldr_new("."); |
714 | 7 |
624 | 8 |
713 | 9 var _std_colors = { |
10 "white": [1, 1, 1], | |
11 "black": [0, 0, 0], | |
12 "red": [1, 0, 0] | |
13 }; | |
14 | |
875
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
15 function parse_color(color) { |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
16 var r, g, b; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
17 var c; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
18 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
19 if (color[0] == "#") { |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
20 r = parseInt(color.substring(1, 3), 16) / 255; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
21 g = parseInt(color.substring(3, 5), 16) / 255; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
22 b = parseInt(color.substring(5, 7), 16) / 255; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
23 } else if(_std_colors[color]) { |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
24 c = _std_colors[color]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
25 r = c[0]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
26 g = c[1]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
27 b = c[2]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
28 } else { |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
29 r = g = b = 0; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
30 } |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
31 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
32 return [r, g, b]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
33 } |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
34 |
714 | 35 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
|
36 return new loadSVG(mb_rt, root, filename); |
0cd59ce76e67
Refactor loadSVG as a class
Thinker K.F. Li <thinker@branda.to>
parents:
717
diff
changeset
|
37 }; |
0cd59ce76e67
Refactor loadSVG as a class
Thinker K.F. Li <thinker@branda.to>
parents:
717
diff
changeset
|
38 |
784
37a1bd3e3ce1
mbapp accept arguments for display, width and height
Thinker K.F. Li <thinker@codemud.net>
parents:
783
diff
changeset
|
39 |
718
0cd59ce76e67
Refactor loadSVG as a class
Thinker K.F. Li <thinker@branda.to>
parents:
717
diff
changeset
|
40 function loadSVG(mb_rt, root, filename) { |
624 | 41 var doc = libxml.parseXmlFile(filename); |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
42 var _root = doc.root(); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
43 var nodes = _root.childNodes(); |
624 | 44 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
|
45 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
|
46 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
|
47 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
|
48 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
|
49 this.gradients={}; |
875
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
50 this.radials = {}; |
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
|
51 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
|
52 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
|
53 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
|
54 |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
55 if(_root.attr("width")) { |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
56 k = _root.attr("width").value(); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
57 this.width = parseFloat(k); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
58 } |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
59 if(_root.attr("height")) { |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
60 k = _root.attr("height").value(); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
61 this.height = parseFloat(k); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
62 } |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
63 |
624 | 64 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
|
65 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
|
66 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
|
67 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
|
68 } 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
|
69 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
|
70 } |
624 | 71 } |
72 } | |
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 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
|
75 var mbname; |
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
76 var name; |
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
77 |
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
78 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
|
79 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
|
80 |
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
81 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
|
82 if(mbname) { |
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
83 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
|
84 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
|
85 } |
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
86 } |
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
87 |
624 | 88 function getInteger(n,name) |
89 { | |
90 if (n == null) return 0; | |
91 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
|
92 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
|
93 return parseInt(a.value()); |
624 | 94 } |
719
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
95 |
631 | 96 function parsePointSize(s) |
97 { | |
98 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
|
99 var i; |
624 | 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
|
101 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
|
102 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
|
103 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
|
104 } |
a47431293043
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 return fs; |
631 | 106 |
107 } | |
108 | |
875
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
109 function parse_style(node) { |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
110 var style_attr; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
111 var style; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
112 var parts, part; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
113 var kv, key, value; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
114 var content = {}; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
115 var i; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
116 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
117 style_attr = node.attr('style'); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
118 if(!style_attr) |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
119 return content; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
120 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
121 style = style_attr.value(); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
122 parts = style.split(';'); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
123 for(i = 0; i < parts.length; i++) { |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
124 part = parts[i].trim(); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
125 if(part) { |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
126 kv = part.split(':'); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
127 key = kv[0].trim(); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
128 value = kv[1].trim(); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
129 content[key] = value; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
130 } |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
131 } |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
132 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
133 return content; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
134 } |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
135 |
631 | 136 function parseColor(c) |
137 { | |
138 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
|
139 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
|
140 } |
631 | 141 } |
719
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
142 |
631 | 143 function parseTextStyle(style,n) |
624 | 144 { |
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
|
145 var attr; |
625
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
146 if (n) { |
9f2080b68f8e
Add the text style parser. This can not handle the recursive tspan yet.
wycc
parents:
624
diff
changeset
|
147 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
|
148 } 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
|
149 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
|
150 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
151 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
|
152 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
|
153 } |
a47431293043
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 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
|
155 |
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
|
156 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
|
157 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
|
158 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
|
159 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
|
160 } 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
|
161 } 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
|
162 } 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
|
163 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
|
164 } 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
|
165 } 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
|
166 } 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
|
167 } 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
|
168 } 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
|
169 } 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
|
170 } 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
|
171 } 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
|
172 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
|
173 } 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
|
174 } 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
|
175 } 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
|
176 } 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
|
177 } 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
|
178 } 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
|
179 } else { |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
180 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
|
181 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
182 } |
624 | 183 } |
732
6879aa403306
Add set_text to the coordinate of the coord_t of the text.
wycc
parents:
720
diff
changeset
|
184 function tspan_set_text(text) |
6879aa403306
Add set_text to the coordinate of the coord_t of the text.
wycc
parents:
720
diff
changeset
|
185 { |
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
|
186 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
|
187 } |
624 | 188 |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
189 loadSVG.prototype.parseTSpan = function(coord, n,style) { |
624 | 190 var x = getInteger(n,'x'); |
191 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
|
192 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
|
193 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
|
194 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
|
195 |
714 | 196 var obj = this.mb_rt.stext_new(n.text(),x,y); |
631 | 197 parseTextStyle(style,n); |
714 | 198 style.paint = this.mb_rt.paint_color_new(1,1,1,1); |
199 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
|
200 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
|
201 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
|
202 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
|
203 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
|
204 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
|
205 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
|
206 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
|
207 } 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
|
208 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
209 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
210 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
|
211 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
|
212 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
|
213 }; |
624 | 214 |
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
|
215 loadSVG.prototype._prepare_paint_color = function(color, alpha) { |
706 | 216 var paint; |
713 | 217 var c; |
706 | 218 |
219 if (color[0]=='#') { | |
220 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
|
221 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
|
222 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
|
223 b = parseInt(color.substring(5,7),16)/255; |
714 | 224 paint = this.mb_rt.paint_color_new(r, g, b, alpha); |
713 | 225 } else if(_std_colors[color]) { |
226 c = _std_colors[color]; | |
714 | 227 paint = this.mb_rt.paint_color_new(c[0], c[1], c[2], alpha); |
807
5723e5446b7c
Fix incorrect variable name
Thinker K.F. Li <thinker@codemud.net>
parents:
802
diff
changeset
|
228 } else if (color.substring(0,3) == 'url') { |
5723e5446b7c
Fix incorrect variable name
Thinker K.F. Li <thinker@codemud.net>
parents:
802
diff
changeset
|
229 var id = color.substring(5, color.length-1); |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
230 var gr = this.gradients[id]; |
875
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
231 if(gr) { |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
232 paint = this.mb_rt.paint_linear_new(gr[0],gr[1],gr[2],gr[3]); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
233 } else { |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
234 var radial = this.radials[id]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
235 paint = this.mb_rt.paint_radial_new(radial[0], |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
236 radial[1], |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
237 radial[2]); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
238 } |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
239 paint.set_stops(this.stop_ref[id]); |
706 | 240 } else { |
714 | 241 paint = this.mb_rt.paint_color_new(0,0,0,1); |
706 | 242 } |
243 return paint; | |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
244 }; |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
245 |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
246 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
|
247 { |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
248 return; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
249 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
|
250 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
|
251 var pair; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
252 var i; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
253 var minx,miny; |
759 | 254 |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
255 minx = 10000; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
256 miny = 10000; |
759 | 257 |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
258 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
|
259 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
|
260 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
|
261 switch(type) { |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
262 case 'm': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
263 case 'l': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
264 case 'a': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
265 case 'x': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
266 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
|
267 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
|
268 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
|
269 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
|
270 i++; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
271 } 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
|
272 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
|
273 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
|
274 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
|
275 } |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
276 break; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
277 case 'q': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
278 // Implement this latter |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
279 break; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
280 case 'c': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
281 // Implement this latter |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
282 break; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
283 case 's': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
284 // Implement this latter |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
285 break; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
286 case 'h': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
287 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
|
288 break; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
289 case 'v': |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
290 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
|
291 break; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
292 default: |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
293 continue; |
759 | 294 } |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
295 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
|
296 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
|
297 } |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
298 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
|
299 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
|
300 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
|
301 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
|
302 }; |
759 | 303 |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
304 function _mul(m1, m2) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
305 var res = new Array(); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
306 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
307 res.push(m1[0] * m2[0] + m1[1] * m2[3]); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
308 res.push(m1[0] * m2[1] + m1[1] * m2[4]); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
309 res.push(m1[0] * m2[2] + m1[1] * m2[5] + m1[2]); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
310 res.push(m1[3] * m2[0] + m1[4] * m2[3]); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
311 res.push(m1[3] * m2[1] + m1[4] * m2[4]); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
312 res.push(m1[3] * m2[2] + m1[4] * m2[5] + m1[5]); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
313 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
314 return res; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
315 } |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
316 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
317 function _pnt_transform(x, y, matrix) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
318 var rx, ry; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
319 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
320 rx = x * matrix[0] + y * matrix[1] + matrix[2]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
321 ry = x * matrix[3] + y * matrix[4] + matrix[5]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
322 return new Array(rx, ry); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
323 } |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
324 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
325 function _shift_transform(x, y, matrix) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
326 var rx, ry; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
327 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
328 rx = x * matrix[0] + y * matrix[1]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
329 ry = x * matrix[3] + y * matrix[4]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
330 return new Array(rx, ry); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
331 } |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
332 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
333 function _transform_bbox(bbox, matrix) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
334 var min_x, min_y, max_x, max_y; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
335 var x, y; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
336 var pnt; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
337 var pnts = new Array(); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
338 var i; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
339 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
340 pnt = _pnt_transform(bbox.x, bbox.y, matrix); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
341 pnts.push(pnt); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
342 pnt = _pnt_transform(bbox.x + bbox.width, bbox.y, matrix); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
343 pnts.push(pnt); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
344 pnt = _pnt_transform(bbox.x, bbox.y + bbox.height, matrix); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
345 pnts.push(pnt); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
346 pnt = _pnt_transform(bbox.x + bbox.width, bbox.y + bbox.height, matrix); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
347 pnts.push(pnt); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
348 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
349 min_x = max_x = pnts[0][0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
350 min_y = max_y = pnts[0][1]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
351 for(i = 1; i < pnts.length; i++) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
352 pnt = pnts[i]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
353 if(pnt[0] < min_x) |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
354 min_x = pnt[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
355 if(pnt[1] < min_y) |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
356 min_y = pnt[1]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
357 if(pnt[0] > max_x) |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
358 max_x = pnt[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
359 if(pnt[1] > max_y) |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
360 max_y = pnt[1]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
361 } |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
362 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
363 bbox.x = min_x; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
364 bbox.y = min_y; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
365 bbox.width = max_x - min_x; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
366 bbox.height = max_y - min_y; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
367 } |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
368 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
369 function _reverse(m1) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
370 var rev = new Array(1, 0, 0, 0, 1, 0); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
371 var m = new Array(m1[0], m1[1], m1[2], m1[3], m1[4], m1[5]); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
372 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
373 rev[3] = -m[3] / m[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
374 m[3] = 0; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
375 m[4] += rev[3] * m[1]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
376 m[5] += rev[3] * m[2]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
377 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
378 rev[1] = -m[1] / m[4]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
379 rev[0] += rev[1] * rev[3]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
380 m[1] = 0; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
381 m[2] += rev[1] * m[5]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
382 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
383 rev[2] = -m[2]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
384 rev[5] = -m[5]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
385 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
386 rev[0] = rev[0] / m[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
387 rev[1] = rev[1] / m[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
388 rev[2] = rev[2] / m[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
389 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
390 rev[3] = rev[3] / m[4]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
391 rev[4] = rev[4] / m[4]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
392 rev[5] = rev[5] / m[4]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
393 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
394 return rev; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
395 } |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
396 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
397 var _bbox_proto = { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
398 _get_ac_saved_rev: function() { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
399 var c = this.owner; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
400 var mtx; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
401 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
402 if(c.type != "coord") |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
403 c = c.parent; // is a shape! |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
404 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
405 mtx = c._mbapp_saved_rev_mtx; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
406 while(c.parent && typeof c.parent != "undefined") { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
407 c = c.parent; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
408 mtx = _mul(mtx, c._mbapp_saved_rev_mtx); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
409 } |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
410 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
411 return mtx; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
412 }, |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
413 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
414 _get_ac_mtx: function() { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
415 var c = this.owner; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
416 var mtx; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
417 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
418 if(c.type != "coord") |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
419 c = c.parent; // is a shape! |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
420 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
421 mtx = [c[0], c[1], c[2], c[3], c[4], c[5]]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
422 while(c.parent) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
423 c = c.parent; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
424 mtx = _mul(c, mtx); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
425 } |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
426 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
427 return mtx; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
428 }, |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
429 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
430 _saved_to_current: function() { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
431 var r; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
432 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
433 r = _mul(this._get_ac_mtx(), this._get_ac_saved_rev()); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
434 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
435 return r; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
436 }, |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
437 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
438 /*! \brief Update x, y, width, and height of the bbox. |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
439 */ |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
440 update: function() { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
441 var mtx; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
442 |
861
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
443 this.x = this.orig.x; |
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
444 this.y = this.orig.y; |
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
445 this.width = this.orig.width; |
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
446 this.height = this.orig.height; |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
447 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
448 mtx = this._saved_to_current(); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
449 _transform_bbox(this, mtx); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
450 }, |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
451 }; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
452 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
453 var _center_proto = { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
454 _get_ac_saved_rev: function() { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
455 var c = this.owner; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
456 var mtx; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
457 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
458 if(c.type != "coord") |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
459 c = c.parent; // is a shape! |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
460 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
461 mtx = c._mbapp_saved_rev_mtx; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
462 while(c.parent && typeof c.parent != "undefined") { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
463 c = c.parent; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
464 mtx = _mul(mtx, c._mbapp_saved_rev_mtx); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
465 } |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
466 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
467 return mtx; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
468 }, |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
469 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
470 _get_ac_mtx: function() { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
471 var c = this.owner; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
472 var mtx; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
473 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
474 if(c.type != "coord") |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
475 c = c.parent; // is a shape! |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
476 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
477 mtx = [c[0], c[1], c[2], c[3], c[4], c[5]]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
478 while(c.parent) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
479 c = c.parent; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
480 mtx = _mul(c, mtx); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
481 } |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
482 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
483 return mtx; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
484 }, |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
485 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
486 _get_ac_rev: function() { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
487 var c = this.owner; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
488 var mtx; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
489 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
490 if(c.type != "coord") |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
491 c = c.parent; // is a shape! |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
492 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
493 mtx = _reverse([c[0], c[1], c[2], c[3], c[4], c[5]]); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
494 while(c.parent) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
495 c = c.parent; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
496 mtx = _mul(mtx, _reverse([c[0], c[1], c[2], c[3], c[4], c[5]])); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
497 } |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
498 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
499 return mtx; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
500 }, |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
501 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
502 _saved_to_current: function() { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
503 var r; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
504 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
505 r = _mul(this._get_ac_mtx(), this._get_ac_saved_rev()); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
506 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
507 return r; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
508 }, |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
509 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
510 /*! \brief Update x, y of center point of an object. |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
511 */ |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
512 update: function() { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
513 var mtx; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
514 var xy; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
515 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
516 mtx = this._saved_to_current(); |
861
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
517 xy = _pnt_transform(this.orig.x, this.orig.y, mtx); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
518 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
519 this._x = xy[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
520 this._y = xy[1]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
521 }, |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
522 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
523 /*! \brief Move owner object to make center at (x, y). |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
524 */ |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
525 move: function(x, y) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
526 var mtx; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
527 var xdiff = x - this._x; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
528 var ydiff = y - this._y; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
529 var shiftxy; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
530 var c; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
531 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
532 mtx = this._get_ac_rev(); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
533 shiftxy = _shift_transform(xdiff, ydiff, mtx); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
534 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
535 c = this.owner; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
536 if(c.type != "coord") |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
537 c = c.parent; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
538 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
539 c[2] += shiftxy[0]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
540 c[5] += shiftxy[1]; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
541 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
542 this._x = x; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
543 this._y = y; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
544 }, |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
545 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
546 /*! \brief Move owner object to make center at position specified by pnt. |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
547 */ |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
548 move_pnt: function(pnt) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
549 this.move(pnt.x, pnt.y); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
550 }, |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
551 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
552 /*! \brief Prevent user to modify value. |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
553 */ |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
554 get x() { return this._x; }, |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
555 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
556 /*! \brief Prevent user to modify value. |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
557 */ |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
558 get y() { return this._y; }, |
857
ea1e88c40548
Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents:
854
diff
changeset
|
559 |
ea1e88c40548
Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents:
854
diff
changeset
|
560 get rel() { |
ea1e88c40548
Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents:
854
diff
changeset
|
561 var rev; |
ea1e88c40548
Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents:
854
diff
changeset
|
562 var xy; |
ea1e88c40548
Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents:
854
diff
changeset
|
563 |
ea1e88c40548
Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents:
854
diff
changeset
|
564 rev = this._get_ac_rev(); |
861
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
565 xy = _pnt_transform(this.orig.x, this.orig.y, rev); |
857
ea1e88c40548
Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents:
854
diff
changeset
|
566 |
ea1e88c40548
Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents:
854
diff
changeset
|
567 return {x: xy[0], y: xy[1]}; |
ea1e88c40548
Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents:
854
diff
changeset
|
568 }, |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
569 }; |
759 | 570 |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
571 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
|
572 var a; |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
573 var vstr; |
808
9b6c26cf9102
Move bounding box and center back to an object
Thinker K.F. Li <thinker@codemud.net>
parents:
807
diff
changeset
|
574 var bbox, center; |
861
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
575 var orig; |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
576 |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
577 a = node.attr("bbox-x"); |
847 | 578 sys.puts("a="+a); |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
579 if(!a) |
842
76fe4afce640
The inkscape:bbox is defined as the global coordinate system. However, the center.x and center.y must be the coordiante system of the parent group of the SVG entity. Therefore, we need to do coordinate transformation from the global coordination system to the local coordination system.
wycc
parents:
830
diff
changeset
|
580 return 0; |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
581 |
861
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
582 /* bbox.orig is initial values of bbox. The bbox is recomputed |
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
583 * according bbox.orig and current matrix. See bbox.update(). |
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
584 */ |
808
9b6c26cf9102
Move bounding box and center back to an object
Thinker K.F. Li <thinker@codemud.net>
parents:
807
diff
changeset
|
585 tgt.bbox = bbox = new Object(); |
861
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
586 bbox.orig = orig = new Object(); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
587 bbox.owner = tgt; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
588 bbox.__proto__ = _bbox_proto; |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
589 vstr = a.value(); |
861
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
590 orig.x = parseFloat(vstr); |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
591 |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
592 a = node.attr("bbox-y"); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
593 vstr = a.value(); |
861
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
594 orig.y = this.height - parseFloat(vstr); |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
595 |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
596 a = node.attr("bbox-width"); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
597 vstr = a.value(); |
861
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
598 orig.width = parseFloat(vstr); |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
599 |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
600 a = node.attr("bbox-height"); |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
601 vstr = a.value(); |
861
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
602 orig.height = parseFloat(vstr); |
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
603 orig.y -= orig.height; |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
604 |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
605 bbox.update(); |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
606 |
861
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
607 /* center.orig is initial values of center. The center is |
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
608 * recomputed according center.orig and current matrix. See |
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
609 * center.update(). |
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
610 */ |
808
9b6c26cf9102
Move bounding box and center back to an object
Thinker K.F. Li <thinker@codemud.net>
parents:
807
diff
changeset
|
611 tgt.center = center = new Object(); |
861
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
612 center.orig = orig = new Object(); |
808
9b6c26cf9102
Move bounding box and center back to an object
Thinker K.F. Li <thinker@codemud.net>
parents:
807
diff
changeset
|
613 |
861
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
614 orig.x = bbox.orig.width / 2 + bbox.orig.x; |
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
615 orig.y = bbox.orig.height / 2 + bbox.orig.y; |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
616 a = node.attr("transform-center-x"); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
617 if(a) { |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
618 vstr = a.value(); |
861
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
619 orig.x += parseFloat(vstr); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
620 a = node.attr("transform-center-y"); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
621 vstr = a.value(); |
861
e69f551e4a37
Move initial values of bbox and center to bbox.orig and center.orig
Thinker K.F. Li <thinker@codemud.net>
parents:
857
diff
changeset
|
622 orig.y -= parseFloat(vstr); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
623 } |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
624 center.__proto__ = _center_proto; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
625 center.owner = tgt; |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
626 center.update(); |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
627 |
842
76fe4afce640
The inkscape:bbox is defined as the global coordinate system. However, the center.x and center.y must be the coordiante system of the parent group of the SVG entity. Therefore, we need to do coordinate transformation from the global coordination system to the local coordination system.
wycc
parents:
830
diff
changeset
|
628 return 1; |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
629 } |
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
630 |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
631 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
|
632 var style = node.attr('style'); |
706 | 633 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
|
634 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
|
635 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
|
636 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
|
637 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
|
638 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
|
639 var i; |
706 | 640 |
717
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
641 if(style != null) { |
706 | 642 var items = style.value().split(';'); |
643 var alpha; | |
644 | |
645 for(i in items) { | |
646 var f = items[i].split(':'); | |
647 if (f[0] == 'opacity') { | |
648 alpha = f[1]; | |
649 } 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
|
650 fill_color = f[1]; |
706 | 651 } else if (f[0] == 'fill-opacity') { |
652 fill_alpha = parseFloat(f[1]); | |
653 } 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
|
654 stroke_color = f[1]; |
706 | 655 } 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
|
656 tgt.stroke_width = parseFloat(f[1]); |
706 | 657 } else if (f[0] == 'stroke-opacity') { |
658 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
|
659 } 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
|
660 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
|
661 return; |
706 | 662 } |
663 } | |
664 | |
717
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
665 } |
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
666 |
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
667 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
|
668 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
|
669 |
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
670 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
|
671 if(fill_color != "none") { |
714 | 672 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
|
673 paint.fill(tgt); |
706 | 674 } |
717
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
675 } else { |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
676 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
|
677 } |
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
678 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
|
679 if(stroke_color != "none") { |
714 | 680 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
|
681 paint.stroke(tgt); |
706 | 682 } |
717
b822b1912d67
Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents:
714
diff
changeset
|
683 } else { |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
684 black_paint.stroke(tgt); |
706 | 685 } |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
686 }; |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
687 |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
688 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
|
689 { |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
690 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
|
691 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
|
692 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
|
693 |
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
694 guessPathBoundingBox(coord,d); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
695 coord.add_shape(path); |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
696 this._set_paint(n, path); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
697 this._set_bbox(n, path); |
719
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
698 |
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
699 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
|
700 }; |
706 | 701 |
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
|
702 loadSVG.prototype.parseText=function(accu,coord,id, n) |
624 | 703 { |
704 var x = getInteger(n,'x'); | |
705 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
|
706 var tcoord = this.mb_rt.coord_new(coord); |
631 | 707 var style = new Object(); |
759 | 708 |
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
|
709 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
|
710 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
|
711 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
|
712 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
|
713 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
714 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
|
715 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
|
716 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
|
717 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
|
718 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
719 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
|
720 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
|
721 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
|
722 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
|
723 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
|
724 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
|
725 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
|
726 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
|
727 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
|
728 } 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
|
729 } |
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
|
730 } |
847 | 731 sys.puts(y); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
732 this._set_bbox(n, tcoord); |
624 | 733 |
719
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
734 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
|
735 }; |
624 | 736 |
759 | 737 |
738 function multiply(s,d) { | |
739 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
|
740 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
|
741 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
|
742 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
|
743 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
|
744 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
|
745 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
|
746 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
|
747 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
|
748 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
|
749 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
|
750 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
|
751 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
|
752 }; |
759 | 753 |
624 | 754 function parseTransform(coord, s) |
755 { | |
756 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
|
757 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
|
758 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
|
759 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
|
760 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
|
761 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
762 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
|
763 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
|
764 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
|
765 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
|
766 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
|
767 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
768 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
769 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
|
770 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
|
771 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
|
772 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
|
773 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
|
774 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
|
775 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
776 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
|
777 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
|
778 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
|
779 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
|
780 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
|
781 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
|
782 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
|
783 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
|
784 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
|
785 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
|
786 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
|
787 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
|
788 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
|
789 } |
624 | 790 } |
791 | |
759 | 792 loadSVG.prototype.parseRect=function(accu_matrix,coord, id, n) |
624 | 793 { |
703
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
794 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
|
795 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
|
796 var rx,ry; |
703
3457519e3b9c
Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents:
647
diff
changeset
|
797 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
|
798 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
|
799 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
|
800 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
|
801 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
|
802 |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
803 var 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
|
804 |
842
76fe4afce640
The inkscape:bbox is defined as the global coordinate system. However, the center.x and center.y must be the coordiante system of the parent group of the SVG entity. Therefore, we need to do coordinate transformation from the global coordination system to the local coordination system.
wycc
parents:
830
diff
changeset
|
805 if (trans) |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
806 parseTransform(tcoord,trans.value()); |
759 | 807 |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
808 var rect = this.mb_rt.rect_new(x,y,w,h,10, 10); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
809 tcoord.add_shape(rect); |
785
b6d9c42019d1
Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents:
784
diff
changeset
|
810 this._set_paint(n, rect); |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
811 this._set_bbox(n, tcoord); |
788
7ec13634c97d
Add holder for animate
Thinker K.F. Li <thinker@codemud.net>
parents:
787
diff
changeset
|
812 |
7ec13634c97d
Add holder for animate
Thinker K.F. Li <thinker@codemud.net>
parents:
787
diff
changeset
|
813 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
|
814 }; |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
815 |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
816 // 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
|
817 // 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
|
818 // 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
|
819 // 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
|
820 // 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
|
821 // 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
|
822 // |
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
|
823 // 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
|
824 // 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
|
825 |
810
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
826 function parseGroupStyle(style,n) |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
827 { |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
828 var attr; |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
829 if (n) { |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
830 attr = n.attr('style'); |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
831 } else { |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
832 attr = null; |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
833 } |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
834 if (attr == null) { |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
835 return; |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
836 } |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
837 var f = attr.value().split(';'); |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
838 |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
839 for(i in f) { |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
840 var kv = f[i].split(':'); |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
841 if (kv[0] == 'opacity') { |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
842 style.opacity = parseFloat(kv[1]); |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
843 } else { |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
844 sys.puts("Unknown style: "+kv[0]); |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
845 } |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
846 } |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
847 } |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
848 |
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
|
849 loadSVG.prototype.parseGroup=function(accu_matrix,root, group_id, n) { |
624 | 850 var k; |
851 var nodes = n.childNodes(); | |
714 | 852 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
|
853 // 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
|
854 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
|
855 var accu=[1,0,0,0,1,0]; |
810
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
856 var style; |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
857 |
759 | 858 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
|
859 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
|
860 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
|
861 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
|
862 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
|
863 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
864 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
|
865 multiply(accu,coord); |
624 | 866 |
810
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
867 style = {}; |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
868 parseGroupStyle(style, n); |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
869 if(style.opacity) { |
875
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
870 sys.puts("opacity=" + style.opacity); |
830
2a73ff24c141
Use accessor to replace the method to setup the opacity
wycc
parents:
810
diff
changeset
|
871 coord.opacity=style.opacity; |
810
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
872 } |
84853c8559cf
Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents:
808
diff
changeset
|
873 |
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
|
874 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
|
875 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
|
876 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
|
877 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
|
878 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
|
879 id = attr.value(); |
624 | 880 } |
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
|
881 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
|
882 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
|
883 } 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
|
884 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
|
885 } 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
|
886 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
|
887 } 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
|
888 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
|
889 } 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
|
890 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
|
891 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
892 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
893 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
|
894 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
|
895 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
|
896 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
|
897 |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
898 this._set_bbox(n, coord); |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
899 |
719
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
900 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
|
901 }; |
624 | 902 |
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
|
903 loadSVG.prototype.parseImage=function(accu,coord,id, n) |
646 | 904 { |
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
|
905 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
|
906 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
|
907 var trans = n.attr('transform'); |
646 | 908 |
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
|
909 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
|
910 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
|
911 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
|
912 } 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
|
913 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
|
914 } 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
|
915 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
916 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
|
917 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
|
918 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
|
919 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
|
920 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
|
921 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
|
922 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
|
923 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
|
924 } |
646 | 925 |
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
|
926 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
|
927 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
|
928 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
|
929 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
|
930 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
|
931 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
|
932 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
|
933 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
|
934 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
|
935 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
|
936 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
|
937 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
|
938 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
|
939 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
|
940 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
|
941 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
|
942 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
|
943 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
|
944 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
|
945 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
|
946 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
|
947 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
|
948 tcoord.add_shape(img); |
787
0899dcac441c
Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents:
785
diff
changeset
|
949 |
854
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
950 this._set_bbox(n, img); |
eff2f580b536
Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents:
852
diff
changeset
|
951 |
719
1b6856fda760
Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents:
718
diff
changeset
|
952 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
|
953 }; |
624 | 954 |
875
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
955 function _parse_stops(n) { |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
956 var children; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
957 var child; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
958 var style; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
959 var color; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
960 var rgb; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
961 var opacity; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
962 var r, g, b, a; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
963 var offset_atr, offset; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
964 var stops = []; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
965 var i; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
966 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
967 children = n.childNodes(); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
968 for(i = 0; i < children.length; i++) { |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
969 child = children[i]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
970 if(child.name() == "stop") { |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
971 style = parse_style(child); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
972 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
973 color = style["stop-color"]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
974 if(color) { |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
975 rgb = parse_color(color); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
976 r = rgb[0]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
977 g = rgb[1]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
978 b = rgb[2]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
979 } |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
980 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
981 opacity = style["stop-opacity"]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
982 if(opacity) |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
983 a = parseFloat(opacity); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
984 else |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
985 a = 1; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
986 } |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
987 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
988 offset_attr = child.attr("offset"); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
989 if(offset_attr) |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
990 offset = parseFloat(offset_attr.value()); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
991 else |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
992 offset = 0; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
993 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
994 stops.push([offset, r, g, b, a]); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
995 } |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
996 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
997 return stops; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
998 }; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
999 |
750 | 1000 loadSVG.prototype._MB_parseLinearGradient=function(root,n) |
1001 { | |
1002 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
|
1003 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
|
1004 var nodes = n.childNodes(); |
750 | 1005 |
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
|
1006 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
|
1007 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
|
1008 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
|
1009 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
|
1010 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
|
1011 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
|
1012 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
|
1013 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
|
1014 var r,g,b; |
875
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1015 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1016 stops = _parse_stops(n); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1017 |
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
|
1018 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
|
1019 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
|
1020 href = href.value(); |
875
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1021 var hrefid = href.substring(1); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1022 pstops = this.stop_ref[hrefid]; |
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
|
1023 stops = pstops.concat(stops); |
875
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1024 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1025 var hrefgr = this.gradients[hrefid]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1026 if (typeof x1 == "undefined") |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1027 x1 = hrefgr[0]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1028 if (typeof x2 == "undefined") |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1029 x2 = hrefgr[2]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1030 if (typeof y1 == "undefined") |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1031 y1 = hrefgr[1]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1032 if (typeof y2 == "undefined") |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1033 y2 = hrefgr[3]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1034 sys.puts(hrefid); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1035 sys.puts([x1, y1, x2, y2]); |
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
|
1036 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
1037 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
|
1038 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
|
1039 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
|
1040 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
|
1041 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
|
1042 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
|
1043 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
|
1044 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
|
1045 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
|
1046 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
|
1047 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
|
1048 }; |
750 | 1049 |
875
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1050 loadSVG.prototype._MB_parseRadialGradient = function(root,n) { |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1051 var stops; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1052 var cx, cy; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1053 var id; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1054 var href; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1055 var r; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1056 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1057 id = n.attr("id"); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1058 if(!id) |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1059 throw "Require an id"; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1060 id = id.value(); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1061 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1062 stops = _parse_stops(n); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1063 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1064 cx = n.attr("cx"); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1065 if(!cx) |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1066 throw "Miss cx attribute"; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1067 cy = n.attr("cy"); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1068 if(!cy) |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1069 throw "Miss cy attribute"; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1070 cx = parseFloat(cx.value()); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1071 cy = parseFloat(cy.value()); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1072 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1073 r = n.attr("r"); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1074 if(!r) |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1075 throw "Miss r attribute"; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1076 r = parseFloat(r.value()); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1077 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1078 href = n.attr("href"); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1079 if(href) { |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1080 href = href.value().substring(1); |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1081 stops = this.stop_ref[href]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1082 } |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1083 |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1084 this.radials[id] = [cx, cy, r]; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1085 this.stop_ref[id] = stops; |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1086 } |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1087 |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
1088 loadSVG.prototype.parseDefs=function(root,n) |
624 | 1089 { |
1090 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
|
1091 var nodes = n.childNodes(); |
624 | 1092 |
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
|
1093 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
|
1094 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
|
1095 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
|
1096 this._MB_parseLinearGradient(root,nodes[k]); |
875
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1097 } else if(name == "radialGradient") { |
5d7c3c681851
Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents:
873
diff
changeset
|
1098 this._MB_parseRadialGradient(root,nodes[k]); |
624 | 1099 } |
783
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
1100 } |
a47431293043
Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents:
776
diff
changeset
|
1101 }; |
624 | 1102 |
1103 |