annotate nodejs/svg.js @ 878:818e5bed913d abs_n_rel_center

Handle stroke-width and gradientTransform
author Thinker K.F. Li <thinker@codemud.net>
date Sat, 25 Sep 2010 16:17:49 +0800
parents deadcca6e213
children 44f46d6873be
rev   line source
807
5723e5446b7c Fix incorrect variable name
Thinker K.F. Li <thinker@codemud.net>
parents: 802
diff changeset
1 // -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 4; -*-
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
2 // vim: sw=4:ts=8:sts=4
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
3 var libxml = require('libxmljs');
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
4 var sys=require('sys');
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
5 var mbfly = require("mbfly");
646
3a1e80de44ff Add image support
wycc
parents: 632
diff changeset
6 var ldr = mbfly.img_ldr_new(".");
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
7
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
8
713
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
9 var _std_colors = {
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
10 "white": [1, 1, 1],
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
11 "black": [0, 0, 0],
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
12 "red": [1, 0, 0]
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
13 };
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
14
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
15 function parse_color(color) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
16 var r, g, b;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
17 var c;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
18
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
19 if (color[0] == "#") {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
20 r = parseInt(color.substring(1, 3), 16) / 255;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
21 g = parseInt(color.substring(3, 5), 16) / 255;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
22 b = parseInt(color.substring(5, 7), 16) / 255;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
23 } else if(_std_colors[color]) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
24 c = _std_colors[color];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
25 r = c[0];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
26 g = c[1];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
27 b = c[2];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
28 } else {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
29 r = g = b = 0;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
30 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
31
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
32 return [r, g, b];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
33 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
34
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
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
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
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
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
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
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
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
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
71 }
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
72 }
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
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
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
88 function getInteger(n,name)
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
89 {
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
90 if (n == null) return 0;
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
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
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
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
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
96 function parsePointSize(s)
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
97 {
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
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
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
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
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
106
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
107 }
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
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
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
136 function parseColor(c)
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
137 {
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
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
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
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
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
143 function parseTextStyle(style,n)
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
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
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
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
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
188
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
189 loadSVG.prototype.parseTSpan = function(coord, n,style) {
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
190 var x = getInteger(n,'x');
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
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
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
196 var obj = this.mb_rt.stext_new(n.text(),x,y);
631
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
197 parseTextStyle(style,n);
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
198 style.paint = this.mb_rt.paint_color_new(1,1,1,1);
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
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
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
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
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
216 var paint;
713
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
217 var c;
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
218
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
219 if (color[0]=='#') {
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
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
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
224 paint = this.mb_rt.paint_color_new(r, g, b, alpha);
713
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
225 } else if(_std_colors[color]) {
e60ae262127b Recognize color name
Thinker K.F. Li <thinker@branda.to>
parents: 712
diff changeset
226 c = _std_colors[color];
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
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);
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
230 sys.puts(id);
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
231 if(id in this.gradients) {
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
232 var gr = this.gradients[id];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
233 sys.puts(gr);
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
234 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
235 } else {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
236 var radial = this.radials[id];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
237 paint = this.mb_rt.paint_radial_new(radial[0],
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
238 radial[1],
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
239 radial[2]);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
240 }
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
241 paint.set_stops(this.stop_ref[id]);
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
242 sys.puts(this.stop_ref[id]);
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
243 } else {
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
244 paint = this.mb_rt.paint_color_new(0,0,0,1);
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
245 }
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
246 return paint;
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
247 };
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
248
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
249 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
250 {
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
251 return;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
252 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
253 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
254 var pair;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
255 var i;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
256 var minx,miny;
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
257
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
258 minx = 10000;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
259 miny = 10000;
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
260
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
261 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
262 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
263 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
264 switch(type) {
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
265 case 'm':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
266 case 'l':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
267 case 'a':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
268 case 'x':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
269 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
270 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
271 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
272 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
273 i++;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
274 } 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
275 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
276 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
277 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
278 }
785
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 'q':
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 'c':
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 's':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
287 // Implement this latter
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 'h':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
290 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
291 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
292 case 'v':
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
293 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
294 break;
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
295 default:
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
296 continue;
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
297 }
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
298 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
299 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
300 }
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
301 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
302 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
303 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
304 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
305 };
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
306
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
307 function _mul(m1, m2) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
308 var res = new Array();
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
309
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
310 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
311 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
312 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
313 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
314 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
315 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
316
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
317 return res;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
318 }
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 function _pnt_transform(x, y, matrix) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
321 var rx, ry;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
322
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
323 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
324 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
325 return new Array(rx, ry);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
326 }
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 function _shift_transform(x, y, matrix) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
329 var rx, ry;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
330
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
331 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
332 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
333 return new Array(rx, ry);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
334 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
335
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
336 function _transform_bbox(bbox, matrix) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
337 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
338 var x, y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
339 var pnt;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
340 var pnts = new Array();
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
341 var i;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
342
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
343 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
344 pnts.push(pnt);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
345 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
346 pnts.push(pnt);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
347 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
348 pnts.push(pnt);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
349 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
350 pnts.push(pnt);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
351
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
352 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
353 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
354 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
355 pnt = pnts[i];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
356 if(pnt[0] < min_x)
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
357 min_x = pnt[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
358 if(pnt[1] < min_y)
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
359 min_y = pnt[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
360 if(pnt[0] > max_x)
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
361 max_x = pnt[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
362 if(pnt[1] > max_y)
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
363 max_y = pnt[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
364 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
365
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
366 bbox.x = min_x;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
367 bbox.y = min_y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
368 bbox.width = max_x - min_x;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
369 bbox.height = max_y - min_y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
370 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
371
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
372 function _reverse(m1) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
373 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
374 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
375
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
376 rev[3] = -m[3] / m[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
377 m[3] = 0;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
378 m[4] += rev[3] * m[1];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
379 m[5] += rev[3] * m[2];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
380
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
381 rev[1] = -m[1] / m[4];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
382 rev[0] += rev[1] * rev[3];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
383 m[1] = 0;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
384 m[2] += rev[1] * 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[2] = -m[2];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
387 rev[5] = -m[5];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
388
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
389 rev[0] = rev[0] / m[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
390 rev[1] = rev[1] / m[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
391 rev[2] = rev[2] / m[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
392
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
393 rev[3] = rev[3] / m[4];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
394 rev[4] = rev[4] / m[4];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
395 rev[5] = rev[5] / m[4];
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 return rev;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
398 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
399
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
400 var _bbox_proto = {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
401 _get_ac_saved_rev: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
402 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
403 var mtx;
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 if(c.type != "coord")
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
406 c = c.parent; // is a shape!
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
407
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
408 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 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
410 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
411 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
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 return mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
415 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
416
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
417 _get_ac_mtx: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
418 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
419 var mtx;
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 if(c.type != "coord")
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
422 c = c.parent; // is a shape!
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
423
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
424 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
425 while(c.parent) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
426 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
427 mtx = _mul(c, 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 return mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
431 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
432
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
433 _saved_to_current: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
434 var r;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
435
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
436 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
437
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
438 return r;
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
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
441 /*! \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
442 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
443 update: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
444 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
445
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
446 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
447 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
448 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
449 this.height = this.orig.height;
854
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 mtx = this._saved_to_current();
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
452 _transform_bbox(this, mtx);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
453 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
454 };
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
455
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
456 var _center_proto = {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
457 _get_ac_saved_rev: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
458 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
459 var mtx;
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 if(c.type != "coord")
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
462 c = c.parent; // is a shape!
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
463
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
464 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 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
466 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
467 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
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 return mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
471 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
472
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
473 _get_ac_mtx: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
474 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
475 var mtx;
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 if(c.type != "coord")
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
478 c = c.parent; // is a shape!
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
479
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
480 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
481 while(c.parent) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
482 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
483 mtx = _mul(c, 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 return mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
487 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
488
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
489 _get_ac_rev: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
490 var c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
491 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
492
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
493 if(c.type != "coord")
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
494 c = c.parent; // is a shape!
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
495
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
496 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 while(c.parent) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
498 c = c.parent;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
499 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
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 return mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
503 },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
504
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
505 _saved_to_current: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
506 var r;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
507
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
508 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
509
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
510 return r;
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
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
513 /*! \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
514 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
515 update: function() {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
516 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
517 var xy;
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 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
520 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
521
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
522 this._x = xy[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
523 this._y = xy[1];
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
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
526 /*! \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
527 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
528 move: function(x, y) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
529 var mtx;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
530 var xdiff = x - this._x;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
531 var ydiff = y - this._y;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
532 var shiftxy;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
533 var c;
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 mtx = this._get_ac_rev();
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
536 shiftxy = _shift_transform(xdiff, ydiff, mtx);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
537
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
538 c = this.owner;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
539 if(c.type != "coord")
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
540 c = c.parent;
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 c[2] += shiftxy[0];
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
543 c[5] += shiftxy[1];
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 this._x = x;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
546 this._y = y;
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
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
549 /*! \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
550 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
551 move_pnt: function(pnt) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
552 this.move(pnt.x, pnt.y);
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
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
555 /*! \brief Prevent user to modify value.
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
556 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
557 get x() { return this._x; },
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
558
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
559 /*! \brief Prevent user to modify value.
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
560 */
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
561 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
562
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
563 get rel() {
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
564 var rev;
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
565 var xy;
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 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
568 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
569
ea1e88c40548 Make scale work on center of an object
Thinker K.F. Li <thinker@codemud.net>
parents: 854
diff changeset
570 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
571 },
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
572 };
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
573
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
574 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
575 var a;
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
576 var vstr;
808
9b6c26cf9102 Move bounding box and center back to an object
Thinker K.F. Li <thinker@codemud.net>
parents: 807
diff changeset
577 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
578 var orig;
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
579
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
580 a = node.attr("bbox-x");
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
581 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
582 return 0;
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
583
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
584 /* 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
585 * 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
586 */
808
9b6c26cf9102 Move bounding box and center back to an object
Thinker K.F. Li <thinker@codemud.net>
parents: 807
diff changeset
587 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
588 bbox.orig = orig = new Object();
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
589 bbox.owner = tgt;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
590 bbox.__proto__ = _bbox_proto;
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
591 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
592 orig.x = parseFloat(vstr);
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
593
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
594 a = node.attr("bbox-y");
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
595 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
596 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
597
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
598 a = node.attr("bbox-width");
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
599 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
600 orig.width = parseFloat(vstr);
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
601
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
602 a = node.attr("bbox-height");
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
603 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
604 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
605 orig.y -= orig.height;
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
606
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
607 bbox.update();
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
608
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
609 /* 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
610 * 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
611 * 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
612 */
808
9b6c26cf9102 Move bounding box and center back to an object
Thinker K.F. Li <thinker@codemud.net>
parents: 807
diff changeset
613 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
614 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
615
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
616 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
617 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
618 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
619 if(a) {
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
620 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
621 orig.x += parseFloat(vstr);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
622 a = node.attr("transform-center-y");
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
623 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
624 orig.y -= parseFloat(vstr);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
625 }
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
626 center.__proto__ = _center_proto;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
627 center.owner = tgt;
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
628 center.update();
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
629
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
630 return 1;
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
631 }
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
632
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
633 loadSVG.prototype._set_paint = function(node, tgt) {
877
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
634 var style;
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
635 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
636 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
637 var stroke_alpha = 1;
877
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
638 var alpha = 1;
717
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
639 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
640 var stroke_color;
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
641 var stroke_width = 1;
717
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
642 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
643 var i;
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
644
877
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
645 style = parse_style(node);
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
646 if(style) {
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
647 if('opacity' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
648 alpha = parseFloat(style['opacity']);
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
649 if('fill' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
650 fill_color = style['fill'];
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
651 if('fill-opacity' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
652 fill_alpha = parseFloat(style['fill-opacity']);
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
653 if('stroke' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
654 stroke_color = style['stroke'];
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
655 if('stroke-width' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
656 stroke_width = parseFloat(style['stroke-width']);
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
657 if('stroke-opacity' in style)
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
658 stroke_alpha = parseFloat(style['stroke-opacity']);
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
659 if('display' in style && style['display'] == 'none')
deadcca6e213 Refactory loadSVG._set_paint()
Thinker K.F. Li <thinker@codemud.net>
parents: 876
diff changeset
660 return;
717
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
661 }
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
662
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
663 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
664 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
665
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
666 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
667 if(fill_color != "none") {
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
668 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
669 paint.fill(tgt);
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
670 }
717
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
671 } else {
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
672 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
673 }
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
674 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
675 if(stroke_color != "none") {
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
676 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
677 paint.stroke(tgt);
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
678 }
717
b822b1912d67 Paint with black for unspecified, not "none", fill and stroke.
Thinker K.F. Li <thinker@branda.to>
parents: 714
diff changeset
679 } else {
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
680 black_paint.stroke(tgt);
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
681 }
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
682
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
683 tgt.stroke_width = stroke_width;
785
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
684 };
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
685
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
686 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
687 {
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
688 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
689 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
690 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
691
b6d9c42019d1 Refactor color parsing and fix bug of parsing path
Thinker K.F. Li <thinker@codemud.net>
parents: 784
diff changeset
692 guessPathBoundingBox(coord,d);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
693 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
694 this._set_paint(n, path);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
695 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
696
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
697 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
698 };
706
fdd68e69c59f Parse path tag for SVG
Thinker K.F. Li <thinker@branda.to>
parents: 704
diff changeset
699
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
700 loadSVG.prototype.parseText=function(accu,coord,id, n)
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
701 {
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
702 var x = getInteger(n,'x');
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
703 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
704 var tcoord = this.mb_rt.coord_new(coord);
631
01e960bfc9ff Implement text style parser
wycc
parents: 625
diff changeset
705 var style = new Object();
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
706
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
707 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
708 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
709 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
710 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
711 }
a47431293043 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 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
713 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
714 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
715 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
716 }
a47431293043 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 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
718 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
719 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
720 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
721 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
722 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
723 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
724 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
725 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
726 } 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
727 }
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
728 }
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
729 this._set_bbox(n, tcoord);
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
730
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
731 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
732 };
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
733
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
734
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
735 function multiply(s,d) {
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
736 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
737 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
738 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
739 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
740 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
741 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
742 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
743 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
744 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
745 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
746 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
747 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
748 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
749 };
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
750
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
751 function parseTransform(coord, s)
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
752 {
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
753 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
754 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
755 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
756 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
757 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
758 }
a47431293043 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 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
760 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
761 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
762 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
763 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
764 }
a47431293043 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 }
a47431293043 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 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
767 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
768 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
769 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
770 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
771 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
772 }
a47431293043 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 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
774 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
775 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
776 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
777 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
778 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
779 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
780 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
781 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
782 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
783 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
784 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
785 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
786 }
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
787 }
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
788
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
789 loadSVG.prototype.parseRect=function(accu_matrix,coord, id, n)
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
790 {
703
3457519e3b9c Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents: 647
diff changeset
791 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
792 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
793 var rx,ry;
703
3457519e3b9c Add rect and matrix support. The test.svg can be rendered almost correctly now.
wycc
parents: 647
diff changeset
794 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
795 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
796 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
797 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
798 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
799
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
800 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
801
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
802 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
803 parseTransform(tcoord,trans.value());
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
804
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
805 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
806 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
807 this._set_paint(n, rect);
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
808 this._set_bbox(n, tcoord);
788
7ec13634c97d Add holder for animate
Thinker K.F. Li <thinker@codemud.net>
parents: 787
diff changeset
809
7ec13634c97d Add holder for animate
Thinker K.F. Li <thinker@codemud.net>
parents: 787
diff changeset
810 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
811 };
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
812
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
813 // 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
814 // 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
815 // 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
816 // 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
817 // 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
818 // 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
819 //
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
820 // 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
821 // 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
822
810
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
823 function parseGroupStyle(style,n)
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
824 {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
825 var attr;
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
826 if (n) {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
827 attr = n.attr('style');
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
828 } else {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
829 attr = null;
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
830 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
831 if (attr == null) {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
832 return;
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 var f = attr.value().split(';');
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
835
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
836 for(i in f) {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
837 var kv = f[i].split(':');
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
838 if (kv[0] == 'opacity') {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
839 style.opacity = parseFloat(kv[1]);
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
840 } else {
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
841 sys.puts("Unknown style: "+kv[0]);
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
842 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
843 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
844 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
845
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
846 loadSVG.prototype.parseGroup=function(accu_matrix,root, group_id, n) {
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
847 var k;
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
848 var nodes = n.childNodes();
714
f53e45d1fcd0 Translate the svg.js as a nodejs module.
wycc
parents: 713
diff changeset
849 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
850 // 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
851 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
852 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
853 var style;
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
854
759
ae1ae29348d1 Add origin calculation support
wycc
parents: 750
diff changeset
855 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
856 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
857 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
858 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
859 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
860 }
a47431293043 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 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
862 multiply(accu,coord);
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
863
810
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
864 style = {};
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
865 parseGroupStyle(style, n);
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
866 if(style.opacity) {
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
867 sys.puts("opacity=" + style.opacity);
830
2a73ff24c141 Use accessor to replace the method to setup the opacity
wycc
parents: 810
diff changeset
868 coord.opacity=style.opacity;
810
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
869 }
84853c8559cf Support opacity on coords
Thinker K.F. Li <thinker@codemud.net>
parents: 808
diff changeset
870
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
871 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
872 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
873 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
874 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
875 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
876 id = attr.value();
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
877 }
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
878 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
879 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
880 } 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
881 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
882 } 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
883 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
884 } 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
885 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
886 } 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
887 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
888 }
a47431293043 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 }
a47431293043 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 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
891 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
892 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
893 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
894
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
895 this._set_bbox(n, coord);
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
896
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
897 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
898 };
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
899
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
900 loadSVG.prototype.parseImage=function(accu,coord,id, n)
646
3a1e80de44ff Add image support
wycc
parents: 632
diff changeset
901 {
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
902 var 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
903 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
904 var trans = n.attr('transform');
646
3a1e80de44ff Add image support
wycc
parents: 632
diff changeset
905
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
906 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
907 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
908 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
909 } 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
910 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
911 } 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
912 }
a47431293043 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 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
914 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
915 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
916 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
917 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
918 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
919 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
920 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
921 }
646
3a1e80de44ff Add image support
wycc
parents: 632
diff changeset
922
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
923 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
924 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
925 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
926 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
927 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
928 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
929 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
930 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
931 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
932 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
933 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
934 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
935 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
936 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
937 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
938 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
939 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
940 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
941 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
942 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
943 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
944 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
945 tcoord.add_shape(img);
787
0899dcac441c Set bounding box attributes for JS
Thinker K.F. Li <thinker@codemud.net>
parents: 785
diff changeset
946
854
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
947 this._set_bbox(n, img);
eff2f580b536 Use accessor to return bbox values
Thinker K.F. Li <thinker@codemud.net>
parents: 852
diff changeset
948
719
1b6856fda760 Collect mbnames and mapping to object through mb_rt.mbnames
Thinker K.F. Li <thinker@branda.to>
parents: 718
diff changeset
949 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
950 };
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
951
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
952 function _parse_stops(n) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
953 var children;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
954 var child;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
955 var style;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
956 var color;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
957 var rgb;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
958 var opacity;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
959 var r, g, b, a;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
960 var offset_atr, offset;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
961 var stops = [];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
962 var i;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
963
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
964 children = n.childNodes();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
965 for(i = 0; i < children.length; i++) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
966 child = children[i];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
967 if(child.name() == "stop") {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
968 style = parse_style(child);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
969
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
970 color = style["stop-color"];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
971 if(color) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
972 rgb = parse_color(color);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
973 r = rgb[0];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
974 g = rgb[1];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
975 b = rgb[2];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
976 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
977
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
978 opacity = style["stop-opacity"];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
979 if(opacity)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
980 a = parseFloat(opacity);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
981 else
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
982 a = 1;
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
983
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
984 offset_attr = child.attr("offset");
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
985 if(offset_attr)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
986 offset = parseFloat(offset_attr.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
987 else
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
988 offset = 0;
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
989
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
990 stops.push([offset, r, g, b, a]);
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
991 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
992 }
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 return stops;
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
750
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
997 loadSVG.prototype._MB_parseLinearGradient=function(root,n)
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
998 {
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
999 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
1000 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
1001 var nodes = n.childNodes();
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1002 var mtx = [1, 0, 0, 0, 1, 0];
750
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
1003
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
1004 if (id == null) return;
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1005 id = id.value();
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1006
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
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");
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1011 var xy;
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1012 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
1013 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
1014 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
1015 var r,g,b;
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1016
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1017 if(x1)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1018 x1 = parseFloat(x1.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1019 if(x2)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1020 x2 = parseFloat(x2.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1021 if(y1)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1022 y1 = parseFloat(y1.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1023 if(y2)
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1024 y2 = parseFloat(y2.value());
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1025
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1026 stops = _parse_stops(n);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1027
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
1028 var href = n.attr('href');
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1029 if(href != null) {
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1030 href = href.value();
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1031 var hrefid = href.substring(1);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1032 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
1033 stops = pstops.concat(stops);
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1034
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1035 var hrefgr = this.gradients[hrefid];
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1036 if(typeof x1 == "undefined")
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1037 x1 = hrefgr[0];
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1038 if(typeof y1 == "undefined")
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1039 y1 = hrefgr[1];
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1040 if(typeof x2 == "undefined")
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1041 x2 = hrefgr[2];
876
e6936110c48f Fix bug of parsing linear and radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 875
diff changeset
1042 if(typeof y2 == "undefined")
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1043 y2 = hrefgr[3];
783
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1044 }
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1045
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1046 if(n.attr('gradientTransform')) {
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1047 parseTransform(mtx, n.attr('gradientTransform').value());
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1048 xy = _pnt_transform(x1, y1, mtx);
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1049 x1 = xy[0];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1050 y1 = xy[1];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1051 xy = _pnt_transform(x2, y2, mtx);
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1052 x2 = xy[0];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1053 y2 = xy[1];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1054 }
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1055
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
1056 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
1057 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
1058 };
750
199bac90b90a Add linearGradient support.
wycc
parents: 732
diff changeset
1059
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1060 loadSVG.prototype._MB_parseRadialGradient = function(root,n) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1061 var stops;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1062 var cx, cy;
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1063 var xy;
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1064 var mtx = [1, 0, 0, 0, 1, 0];
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1065 var id;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1066 var href;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1067 var r;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1068
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1069 id = n.attr("id");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1070 if(!id)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1071 throw "Require an id";
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1072 id = id.value();
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1073
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1074 stops = _parse_stops(n);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1075
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1076 cx = n.attr("cx");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1077 if(!cx)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1078 throw "Miss cx attribute";
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1079 cy = n.attr("cy");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1080 if(!cy)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1081 throw "Miss cy attribute";
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1082 cx = parseFloat(cx.value());
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1083 cy = parseFloat(cy.value());
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1084
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1085 r = n.attr("r");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1086 if(!r)
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1087 throw "Miss r attribute";
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1088 r = parseFloat(r.value());
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1089
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1090 href = n.attr("href");
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1091 if(href) {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1092 href = href.value().substring(1);
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1093 stops = this.stop_ref[href];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1094 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1095
878
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1096 if(n.attr('gradientTransform')) {
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1097 parseTransform(mtx, n.attr('gradientTransform').value());
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1098 xy = _pnt_transform(cx, cy, mtx);
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1099 cx = xy[0];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1100 cy = xy[1];
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1101 }
818e5bed913d Handle stroke-width and gradientTransform
Thinker K.F. Li <thinker@codemud.net>
parents: 877
diff changeset
1102
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1103 this.radials[id] = [cx, cy, r];
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1104 this.stop_ref[id] = stops;
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1105 }
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1106
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
1107 loadSVG.prototype.parseDefs=function(root,n)
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1108 {
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1109 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
1110 var nodes = n.childNodes();
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1111
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
1112 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
1113 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
1114 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
1115 this._MB_parseLinearGradient(root,nodes[k]);
875
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1116 } else if(name == "radialGradient") {
5d7c3c681851 Parse radial gradient
Thinker K.F. Li <thinker@codemud.net>
parents: 873
diff changeset
1117 this._MB_parseRadialGradient(root,nodes[k]);
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1118 }
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
1119 }
a47431293043 Re-indent ts=8 to make editor and cat seeing the same thing
Thinker K.F. Li <thinker@codemud.net>
parents: 776
diff changeset
1120 };
624
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1121
d45c928f6523 Add SVG parser sample code.
wycc
parents:
diff changeset
1122