root / trunk / web / dojo / dojox / gfx / vml_attach.js
History | View | Annotate | Download (6.96 KB)
1 | 9 | andrej.cim | /*
|
---|---|---|---|
2 | Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
||
3 | Available via Academic Free License >= 2.1 OR the modified BSD license.
|
||
4 | see: http://dojotoolkit.org/license for details
|
||
5 | */
|
||
6 | |||
7 | |||
8 | dojo.require("dojox.gfx.vml");
|
||
9 | dojo.experimental("dojox.gfx.vml_attach");
|
||
10 | (function(){
|
||
11 | dojox.gfx.attachNode=function(_1){ |
||
12 | if(!_1){
|
||
13 | return null; |
||
14 | } |
||
15 | var s=null; |
||
16 | switch(_1.tagName.toLowerCase()){
|
||
17 | case dojox.gfx.Rect.nodeType:
|
||
18 | s=new dojox.gfx.Rect(_1);
|
||
19 | _2(s); |
||
20 | break;
|
||
21 | case dojox.gfx.Ellipse.nodeType:
|
||
22 | if(_1.style.width==_1.style.height){
|
||
23 | s=new dojox.gfx.Circle(_1);
|
||
24 | _3(s); |
||
25 | }else{
|
||
26 | s=new dojox.gfx.Ellipse(_1);
|
||
27 | _4(s); |
||
28 | } |
||
29 | break;
|
||
30 | case dojox.gfx.Path.nodeType:
|
||
31 | switch(_1.getAttribute("dojoGfxType")){ |
||
32 | case "line": |
||
33 | s=new dojox.gfx.Line(_1);
|
||
34 | _5(s); |
||
35 | break;
|
||
36 | case "polyline": |
||
37 | s=new dojox.gfx.Polyline(_1);
|
||
38 | _6(s); |
||
39 | break;
|
||
40 | case "path": |
||
41 | s=new dojox.gfx.Path(_1);
|
||
42 | _7(s); |
||
43 | break;
|
||
44 | case "text": |
||
45 | s=new dojox.gfx.Text(_1);
|
||
46 | _8(s); |
||
47 | _9(s); |
||
48 | _a(s); |
||
49 | break;
|
||
50 | case "textpath": |
||
51 | s=new dojox.gfx.TextPath(_1);
|
||
52 | _7(s); |
||
53 | _8(s); |
||
54 | _9(s); |
||
55 | break;
|
||
56 | } |
||
57 | break;
|
||
58 | case dojox.gfx.Image.nodeType:
|
||
59 | switch(_1.getAttribute("dojoGfxType")){ |
||
60 | case "image": |
||
61 | s=new dojox.gfx.Image(_1);
|
||
62 | _b(s); |
||
63 | _c(s); |
||
64 | break;
|
||
65 | } |
||
66 | break;
|
||
67 | default:
|
||
68 | return null; |
||
69 | } |
||
70 | if(!(s instanceof dojox.gfx.Image)){ |
||
71 | _d(s); |
||
72 | _e(s); |
||
73 | if(!(s instanceof dojox.gfx.Text)){ |
||
74 | _f(s); |
||
75 | } |
||
76 | } |
||
77 | return s;
|
||
78 | }; |
||
79 | dojox.gfx.attachSurface=function(_10){ |
||
80 | var s=new dojox.gfx.Surface(); |
||
81 | s.clipNode=_10; |
||
82 | var r=s.rawNode=_10.firstChild;
|
||
83 | var b=r.firstChild;
|
||
84 | if(!b||b.tagName!="rect"){ |
||
85 | return null; |
||
86 | } |
||
87 | s.bgNode=r; |
||
88 | return s;
|
||
89 | }; |
||
90 | var _d=function(_11){ |
||
91 | var _12=null,r=_11.rawNode,fo=r.fill; |
||
92 | if(fo.on&&fo.type=="gradient"){ |
||
93 | var _12=dojo.clone(dojox.gfx.defaultLinearGradient),rad=dojox.gfx.matrix._degToRad(fo.angle);
|
||
94 | _12.x2=Math.cos(rad); |
||
95 | _12.y2=Math.sin(rad); |
||
96 | _12.colors=[]; |
||
97 | var _13=fo.colors.value.split(";"); |
||
98 | for(var i=0;i<_13.length;++i){ |
||
99 | var t=_13[i].match(/\S+/g); |
||
100 | if(!t||t.length!=2){ |
||
101 | continue;
|
||
102 | } |
||
103 | _12.colors.push({offset:dojox.gfx.vml._parseFloat(t[0]),color:new dojo.Color(t[1])}); |
||
104 | } |
||
105 | }else{
|
||
106 | if(fo.on&&fo.type=="gradientradial"){ |
||
107 | var _12=dojo.clone(dojox.gfx.defaultRadialGradient),w=parseFloat(r.style.width),h=parseFloat(r.style.height);
|
||
108 | _12.cx=isNaN(w)?0:fo.focusposition.x*w;
|
||
109 | _12.cy=isNaN(h)?0:fo.focusposition.y*h;
|
||
110 | _12.r=isNaN(w)?1:w/2; |
||
111 | _12.colors=[]; |
||
112 | var _13=fo.colors.value.split(";"); |
||
113 | for(var i=_13.length-1;i>=0;--i){ |
||
114 | var t=_13[i].match(/\S+/g); |
||
115 | if(!t||t.length!=2){ |
||
116 | continue;
|
||
117 | } |
||
118 | _12.colors.push({offset:dojox.gfx.vml._parseFloat(t[0]),color:new dojo.Color(t[1])}); |
||
119 | } |
||
120 | }else{
|
||
121 | if(fo.on&&fo.type=="tile"){ |
||
122 | var _12=dojo.clone(dojox.gfx.defaultPattern);
|
||
123 | _12.width=dojox.gfx.pt2px(fo.size.x); |
||
124 | _12.height=dojox.gfx.pt2px(fo.size.y); |
||
125 | _12.x=fo.origin.x*_12.width; |
||
126 | _12.y=fo.origin.y*_12.height; |
||
127 | _12.src=fo.src; |
||
128 | }else{
|
||
129 | if(fo.on&&r.fillcolor){
|
||
130 | _12=new dojo.Color(r.fillcolor+""); |
||
131 | _12.a=fo.opacity; |
||
132 | } |
||
133 | } |
||
134 | } |
||
135 | } |
||
136 | _11.fillStyle=_12; |
||
137 | }; |
||
138 | var _e=function(_14){ |
||
139 | var r=_14.rawNode;
|
||
140 | if(!r.stroked){
|
||
141 | _14.strokeStyle=null;
|
||
142 | return;
|
||
143 | } |
||
144 | var _15=_14.strokeStyle=dojo.clone(dojox.gfx.defaultStroke),rs=r.stroke;
|
||
145 | _15.color=new dojo.Color(r.strokecolor.value);
|
||
146 | _15.width=dojox.gfx.normalizedLength(r.strokeweight+"");
|
||
147 | _15.color.a=rs.opacity; |
||
148 | _15.cap=this._translate(this._capMapReversed,rs.endcap); |
||
149 | _15.join=rs.joinstyle=="miter"?rs.miterlimit:rs.joinstyle;
|
||
150 | _15.style=rs.dashstyle; |
||
151 | }; |
||
152 | var _f=function(_16){ |
||
153 | var s=_16.rawNode.skew,sm=s.matrix,so=s.offset;
|
||
154 | _16.matrix=dojox.gfx.matrix.normalize({xx:sm.xtox,xy:sm.ytox,yx:sm.xtoy,yy:sm.ytoy,dx:dojox.gfx.pt2px(so.x),dy:dojox.gfx.pt2px(so.y)}); |
||
155 | }; |
||
156 | var _17=function(_18){ |
||
157 | _18.bgNode=_18.rawNode.firstChild; |
||
158 | }; |
||
159 | var _2=function(_19){ |
||
160 | var r=_19.rawNode,_1a=r.outerHTML.match(/arcsize = \"(\d*\.?\d+[%f]?)\"/)[1],_1b=r.style,_1c=parseFloat(_1b.width),_1d=parseFloat(_1b.height); |
||
161 | _1a=(_1a.indexOf("%")>=0)?parseFloat(_1a)/100:dojox.gfx.vml._parseFloat(_1a); |
||
162 | _19.shape=dojox.gfx.makeParameters(dojox.gfx.defaultRect,{x:parseInt(_1b.left),y:parseInt(_1b.top),width:_1c,height:_1d,r:Math.min(_1c,_1d)*_1a}); |
||
163 | }; |
||
164 | var _4=function(_1e){ |
||
165 | var _1f=_1e.rawNode.style,rx=parseInt(_1f.width)/2,ry=parseInt(_1f.height)/2; |
||
166 | _1e.shape=dojox.gfx.makeParameters(dojox.gfx.defaultEllipse,{cx:parseInt(_1f.left)+rx,cy:parseInt(_1f.top)+ry,rx:rx,ry:ry}); |
||
167 | }; |
||
168 | var _3=function(_20){ |
||
169 | var _21=_20.rawNode.style,r=parseInt(_21.width)/2; |
||
170 | _20.shape=dojox.gfx.makeParameters(dojox.gfx.defaultCircle,{cx:parseInt(_21.left)+r,cy:parseInt(_21.top)+r,r:r}); |
||
171 | }; |
||
172 | var _5=function(_22){ |
||
173 | var _23=_22.shape=dojo.clone(dojox.gfx.defaultLine),p=_22.rawNode.path.v.match(dojox.gfx.pathVmlRegExp);
|
||
174 | do{
|
||
175 | if(p.length<7||p[0]!="m"||p[3]!="l"||p[6]!="e"){ |
||
176 | break;
|
||
177 | } |
||
178 | _23.x1=parseInt(p[1]);
|
||
179 | _23.y1=parseInt(p[2]);
|
||
180 | _23.x2=parseInt(p[4]);
|
||
181 | _23.y2=parseInt(p[5]);
|
||
182 | }while(false); |
||
183 | }; |
||
184 | var _6=function(_24){ |
||
185 | var _25=_24.shape=dojo.clone(dojox.gfx.defaultPolyline),p=_24.rawNode.path.v.match(dojox.gfx.pathVmlRegExp);
|
||
186 | do{
|
||
187 | if(p.length<3||p[0]!="m"){ |
||
188 | break;
|
||
189 | } |
||
190 | var x=parseInt(p[0]),y=parseInt(p[1]); |
||
191 | if(isNaN(x)||isNaN(y)){
|
||
192 | break;
|
||
193 | } |
||
194 | _25.points.push({x:x,y:y}); |
||
195 | if(p.length<6||p[3]!="l"){ |
||
196 | break;
|
||
197 | } |
||
198 | for(var i=4;i<p.length;i+=2){ |
||
199 | x=parseInt(p[i]); |
||
200 | y=parseInt(p[i+1]);
|
||
201 | if(isNaN(x)||isNaN(y)){
|
||
202 | break;
|
||
203 | } |
||
204 | _25.points.push({x:x,y:y}); |
||
205 | } |
||
206 | }while(false); |
||
207 | }; |
||
208 | var _b=function(_26){ |
||
209 | _26.shape=dojo.clone(dojox.gfx.defaultImage); |
||
210 | _26.shape.src=_26.rawNode.firstChild.src; |
||
211 | }; |
||
212 | var _c=function(_27){ |
||
213 | var m=_27.rawNode.filters["DXImageTransform.Microsoft.Matrix"]; |
||
214 | _27.matrix=dojox.gfx.matrix.normalize({xx:m.M11,xy:m.M12,yx:m.M21,yy:m.M22,dx:m.Dx,dy:m.Dy}); |
||
215 | }; |
||
216 | var _8=function(_28){ |
||
217 | var _29=_28.shape=dojo.clone(dojox.gfx.defaultText),r=_28.rawNode,p=r.path.v.match(dojox.gfx.pathVmlRegExp);
|
||
218 | do{
|
||
219 | if(!p||p.length!=7){ |
||
220 | break;
|
||
221 | } |
||
222 | var c=r.childNodes,i=0; |
||
223 | for(;i<c.length&&c[i].tagName!="textpath";++i){ |
||
224 | } |
||
225 | if(i>=c.length){
|
||
226 | break;
|
||
227 | } |
||
228 | var s=c[i].style;
|
||
229 | _29.text=c[i].string; |
||
230 | switch(s["v-text-align"]){ |
||
231 | case "left": |
||
232 | _29.x=parseInt(p[1]);
|
||
233 | _29.align="start";
|
||
234 | break;
|
||
235 | case "center": |
||
236 | _29.x=(parseInt(p[1])+parseInt(p[4]))/2; |
||
237 | _29.align="middle";
|
||
238 | break;
|
||
239 | case "right": |
||
240 | _29.x=parseInt(p[4]);
|
||
241 | _29.align="end";
|
||
242 | break;
|
||
243 | } |
||
244 | _29.y=parseInt(p[2]);
|
||
245 | _29.decoration=s["text-decoration"];
|
||
246 | _29.rotated=s["v-rotate-letters"].toLowerCase() in dojox.gfx.vml._bool; |
||
247 | _29.kerning=s["v-text-kern"].toLowerCase() in dojox.gfx.vml._bool; |
||
248 | return;
|
||
249 | }while(false); |
||
250 | _28.shape=null;
|
||
251 | }; |
||
252 | var _9=function(_2a){ |
||
253 | var _2b=_2a.fontStyle=dojo.clone(dojox.gfx.defaultFont),c=_2a.rawNode.childNodes,i=0; |
||
254 | for(;i<c.length&&c[i].tagName=="textpath";++i){ |
||
255 | } |
||
256 | if(i>=c.length){
|
||
257 | _2a.fontStyle=null;
|
||
258 | return;
|
||
259 | } |
||
260 | var s=c[i].style;
|
||
261 | _2b.style=s.fontstyle; |
||
262 | _2b.variant=s.fontvariant; |
||
263 | _2b.weight=s.fontweight; |
||
264 | _2b.size=s.fontsize; |
||
265 | _2b.family=s.fontfamily; |
||
266 | }; |
||
267 | var _a=function(_2c){ |
||
268 | _f(_2c); |
||
269 | var _2d=_2c.matrix,fs=_2c.fontStyle;
|
||
270 | if(_2d&&fs){
|
||
271 | _2c.matrix=dojox.gfx.matrix.multiply(_2d,{dy:dojox.gfx.normalizedLength(fs.size)*0.35}); |
||
272 | } |
||
273 | }; |
||
274 | var _7=function(_2e){ |
||
275 | var _2f=_2e.shape=dojo.clone(dojox.gfx.defaultPath),p=_2e.rawNode.path.v.match(dojox.gfx.pathVmlRegExp),t=[],_30=false,map=dojox.gfx.Path._pathVmlToSvgMap; |
||
276 | for(var i=0;i<p.length;++p){ |
||
277 | var s=p[i];
|
||
278 | if(s in map){ |
||
279 | _30=false;
|
||
280 | t.push(map[s]); |
||
281 | }else{
|
||
282 | if(!_30){
|
||
283 | var n=parseInt(s);
|
||
284 | if(isNaN(n)){
|
||
285 | _30=true;
|
||
286 | }else{
|
||
287 | t.push(n); |
||
288 | } |
||
289 | } |
||
290 | } |
||
291 | } |
||
292 | var l=t.length;
|
||
293 | if(l>=4&&t[l-1]==""&&t[l-2]==0&&t[l-3]==0&&t[l-4]=="l"){ |
||
294 | t.splice(l-4,4); |
||
295 | } |
||
296 | if(l){
|
||
297 | _2f.path=t.join(" ");
|
||
298 | } |
||
299 | }; |
||
300 | })(); |