root / trunk / web / dojo / dojox / gfx / vml.js @ 12
History | View | Annotate | Download (22.7 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 | if(!dojo._hasResource["dojox.gfx.vml"]){ |
||
9 | dojo._hasResource["dojox.gfx.vml"]=true; |
||
10 | dojo.provide("dojox.gfx.vml");
|
||
11 | dojo.require("dojox.gfx._base");
|
||
12 | dojo.require("dojox.gfx.shape");
|
||
13 | dojo.require("dojox.gfx.path");
|
||
14 | dojo.require("dojox.gfx.arc");
|
||
15 | dojo.require("dojox.gfx.gradient");
|
||
16 | (function(){
|
||
17 | var d=dojo,g=dojox.gfx,m=g.matrix,gs=g.shape,_1=g.vml;
|
||
18 | _1.xmlns="urn:schemas-microsoft-com:vml";
|
||
19 | _1.text_alignment={start:"left",middle:"center",end:"right"}; |
||
20 | _1._parseFloat=function(_2){ |
||
21 | return _2.match(/^\d+f$/i)?parseInt(_2)/65536:parseFloat(_2); |
||
22 | }; |
||
23 | _1._bool={"t":1,"true":1}; |
||
24 | d.extend(g.Shape,{setFill:function(_3){ |
||
25 | if(!_3){
|
||
26 | this.fillStyle=null; |
||
27 | this.rawNode.filled="f"; |
||
28 | return this; |
||
29 | } |
||
30 | var i,f,fo,a,s;
|
||
31 | if(typeof _3=="object"&&"type" in _3){ |
||
32 | switch(_3.type){
|
||
33 | case "linear": |
||
34 | var _4=this._getRealMatrix(),_5=this.getBoundingBox(),_6=this._getRealBBox?this._getRealBBox():this.getTransformedBoundingBox(); |
||
35 | s=[]; |
||
36 | if(this.fillStyle!==_3){ |
||
37 | this.fillStyle=g.makeParameters(g.defaultLinearGradient,_3);
|
||
38 | } |
||
39 | f=g.gradient.project(_4,this.fillStyle,{x:_5.x,y:_5.y},{x:_5.x+_5.width,y:_5.y+_5.height},_6[0],_6[2]); |
||
40 | a=f.colors; |
||
41 | if(a[0].offset.toFixed(5)!="0.00000"){ |
||
42 | s.push("0 "+g.normalizeColor(a[0].color).toHex()); |
||
43 | } |
||
44 | for(i=0;i<a.length;++i){ |
||
45 | s.push(a[i].offset.toFixed(5)+" "+g.normalizeColor(a[i].color).toHex()); |
||
46 | } |
||
47 | i=a.length-1;
|
||
48 | if(a[i].offset.toFixed(5)!="1.00000"){ |
||
49 | s.push("1 "+g.normalizeColor(a[i].color).toHex());
|
||
50 | } |
||
51 | fo=this.rawNode.fill;
|
||
52 | fo.colors.value=s.join(";");
|
||
53 | fo.method="sigma";
|
||
54 | fo.type="gradient";
|
||
55 | fo.angle=(270-m._radToDeg(f.angle))%360; |
||
56 | fo.on=true;
|
||
57 | break;
|
||
58 | case "radial": |
||
59 | f=g.makeParameters(g.defaultRadialGradient,_3); |
||
60 | this.fillStyle=f;
|
||
61 | var l=parseFloat(this.rawNode.style.left),t=parseFloat(this.rawNode.style.top),w=parseFloat(this.rawNode.style.width),h=parseFloat(this.rawNode.style.height),c=isNaN(w)?1:2*f.r/w; |
||
62 | a=[]; |
||
63 | if(f.colors[0].offset>0){ |
||
64 | a.push({offset:1,color:g.normalizeColor(f.colors[0].color)}); |
||
65 | } |
||
66 | d.forEach(f.colors,function(v,i){
|
||
67 | a.push({offset:1-v.offset*c,color:g.normalizeColor(v.color)}); |
||
68 | }); |
||
69 | i=a.length-1;
|
||
70 | while(i>=0&&a[i].offset<0){ |
||
71 | --i; |
||
72 | } |
||
73 | if(i<a.length-1){ |
||
74 | var q=a[i],p=a[i+1]; |
||
75 | p.color=d.blendColors(q.color,p.color,q.offset/(q.offset-p.offset)); |
||
76 | p.offset=0;
|
||
77 | while(a.length-i>2){ |
||
78 | a.pop(); |
||
79 | } |
||
80 | } |
||
81 | i=a.length-1,s=[];
|
||
82 | if(a[i].offset>0){ |
||
83 | s.push("0 "+a[i].color.toHex());
|
||
84 | } |
||
85 | for(;i>=0;--i){ |
||
86 | s.push(a[i].offset.toFixed(5)+" "+a[i].color.toHex()); |
||
87 | } |
||
88 | fo=this.rawNode.fill;
|
||
89 | fo.colors.value=s.join(";");
|
||
90 | fo.method="sigma";
|
||
91 | fo.type="gradientradial";
|
||
92 | if(isNaN(w)||isNaN(h)||isNaN(l)||isNaN(t)){
|
||
93 | fo.focusposition="0.5 0.5";
|
||
94 | }else{
|
||
95 | fo.focusposition=((f.cx-l)/w).toFixed(5)+" "+((f.cy-t)/h).toFixed(5); |
||
96 | } |
||
97 | fo.focussize="0 0";
|
||
98 | fo.on=true;
|
||
99 | break;
|
||
100 | case "pattern": |
||
101 | f=g.makeParameters(g.defaultPattern,_3); |
||
102 | this.fillStyle=f;
|
||
103 | fo=this.rawNode.fill;
|
||
104 | fo.type="tile";
|
||
105 | fo.src=f.src; |
||
106 | if(f.width&&f.height){
|
||
107 | fo.size.x=g.px2pt(f.width); |
||
108 | fo.size.y=g.px2pt(f.height); |
||
109 | } |
||
110 | fo.alignShape="f";
|
||
111 | fo.position.x=0;
|
||
112 | fo.position.y=0;
|
||
113 | fo.origin.x=f.width?f.x/f.width:0;
|
||
114 | fo.origin.y=f.height?f.y/f.height:0;
|
||
115 | fo.on=true;
|
||
116 | break;
|
||
117 | } |
||
118 | this.rawNode.fill.opacity=1; |
||
119 | return this; |
||
120 | } |
||
121 | this.fillStyle=g.normalizeColor(_3);
|
||
122 | fo=this.rawNode.fill;
|
||
123 | if(!fo){
|
||
124 | fo=this.rawNode.ownerDocument.createElement("v:fill"); |
||
125 | } |
||
126 | fo.method="any";
|
||
127 | fo.type="solid";
|
||
128 | fo.opacity=this.fillStyle.a;
|
||
129 | this.rawNode.fillcolor=this.fillStyle.toHex(); |
||
130 | this.rawNode.filled=true; |
||
131 | return this; |
||
132 | },setStroke:function(_7){ |
||
133 | if(!_7){
|
||
134 | this.strokeStyle=null; |
||
135 | this.rawNode.stroked="f"; |
||
136 | return this; |
||
137 | } |
||
138 | if(typeof _7=="string"||d.isArray(_7)||_7 instanceof d.Color){ |
||
139 | _7={color:_7};
|
||
140 | } |
||
141 | var s=this.strokeStyle=g.makeParameters(g.defaultStroke,_7); |
||
142 | s.color=g.normalizeColor(s.color); |
||
143 | var rn=this.rawNode; |
||
144 | rn.stroked=true;
|
||
145 | rn.strokecolor=s.color.toCss(); |
||
146 | rn.strokeweight=s.width+"px";
|
||
147 | if(rn.stroke){
|
||
148 | rn.stroke.opacity=s.color.a; |
||
149 | rn.stroke.endcap=this._translate(this._capMap,s.cap); |
||
150 | if(typeof s.join=="number"){ |
||
151 | rn.stroke.joinstyle="miter";
|
||
152 | rn.stroke.miterlimit=s.join; |
||
153 | }else{
|
||
154 | rn.stroke.joinstyle=s.join; |
||
155 | } |
||
156 | rn.stroke.dashstyle=s.style=="none"?"Solid":s.style; |
||
157 | } |
||
158 | return this; |
||
159 | },_capMap:{butt:"flat"},_capMapReversed:{flat:"butt"},_translate:function(_8,_9){ |
||
160 | return (_9 in _8)?_8[_9]:_9; |
||
161 | },_applyTransform:function(){ |
||
162 | var _a=this._getRealMatrix(); |
||
163 | if(_a){
|
||
164 | var _b=this.rawNode.skew; |
||
165 | if(typeof _b=="undefined"){ |
||
166 | for(var i=0;i<this.rawNode.childNodes.length;++i){ |
||
167 | if(this.rawNode.childNodes[i].tagName=="skew"){ |
||
168 | _b=this.rawNode.childNodes[i];
|
||
169 | break;
|
||
170 | } |
||
171 | } |
||
172 | } |
||
173 | if(_b){
|
||
174 | _b.on="f";
|
||
175 | var mt=_a.xx.toFixed(8)+" "+_a.xy.toFixed(8)+" "+_a.yx.toFixed(8)+" "+_a.yy.toFixed(8)+" 0 0",_c=Math.floor(_a.dx).toFixed()+"px "+Math.floor(_a.dy).toFixed()+"px",s=this.rawNode.style,l=parseFloat(s.left),t=parseFloat(s.top),w=parseFloat(s.width),h=parseFloat(s.height); |
||
176 | if(isNaN(l)){
|
||
177 | l=0;
|
||
178 | } |
||
179 | if(isNaN(t)){
|
||
180 | t=0;
|
||
181 | } |
||
182 | if(isNaN(w)||!w){
|
||
183 | w=1;
|
||
184 | } |
||
185 | if(isNaN(h)||!h){
|
||
186 | h=1;
|
||
187 | } |
||
188 | var _d=(-l/w-0.5).toFixed(8)+" "+(-t/h-0.5).toFixed(8); |
||
189 | _b.matrix=mt; |
||
190 | _b.origin=_d; |
||
191 | _b.offset=_c; |
||
192 | _b.on=true;
|
||
193 | } |
||
194 | } |
||
195 | if(this.fillStyle&&this.fillStyle.type=="linear"){ |
||
196 | this.setFill(this.fillStyle); |
||
197 | } |
||
198 | return this; |
||
199 | },_setDimensions:function(_e,_f){ |
||
200 | return this; |
||
201 | },setRawNode:function(_10){ |
||
202 | _10.stroked="f";
|
||
203 | _10.filled="f";
|
||
204 | this.rawNode=_10;
|
||
205 | },_moveToFront:function(){ |
||
206 | this.rawNode.parentNode.appendChild(this.rawNode); |
||
207 | return this; |
||
208 | },_moveToBack:function(){ |
||
209 | var r=this.rawNode,p=r.parentNode,n=p.firstChild; |
||
210 | p.insertBefore(r,n); |
||
211 | if(n.tagName=="rect"){ |
||
212 | n.swapNode(r); |
||
213 | } |
||
214 | return this; |
||
215 | },_getRealMatrix:function(){ |
||
216 | return this.parentMatrix?new g.Matrix2D([this.parentMatrix,this.matrix]):this.matrix; |
||
217 | }}); |
||
218 | dojo.declare("dojox.gfx.Group",g.Shape,{constructor:function(){ |
||
219 | _1.Container._init.call(this);
|
||
220 | },_applyTransform:function(){ |
||
221 | var _11=this._getRealMatrix(); |
||
222 | for(var i=0;i<this.children.length;++i){ |
||
223 | this.children[i]._updateParentMatrix(_11);
|
||
224 | } |
||
225 | return this; |
||
226 | },_setDimensions:function(_12,_13){ |
||
227 | var r=this.rawNode,rs=r.style,bs=this.bgNode.style; |
||
228 | rs.width=_12; |
||
229 | rs.height=_13; |
||
230 | r.coordsize=_12+" "+_13;
|
||
231 | bs.width=_12; |
||
232 | bs.height=_13; |
||
233 | for(var i=0;i<this.children.length;++i){ |
||
234 | this.children[i]._setDimensions(_12,_13);
|
||
235 | } |
||
236 | return this; |
||
237 | }}); |
||
238 | g.Group.nodeType="group";
|
||
239 | dojo.declare("dojox.gfx.Rect",gs.Rect,{setShape:function(_14){ |
||
240 | var _15=this.shape=g.makeParameters(this.shape,_14); |
||
241 | this.bbox=null; |
||
242 | var r=Math.min(1,(_15.r/Math.min(parseFloat(_15.width),parseFloat(_15.height)))).toFixed(8); |
||
243 | var _16=this.rawNode.parentNode,_17=null; |
||
244 | if(_16){
|
||
245 | if(_16.lastChild!==this.rawNode){ |
||
246 | for(var i=0;i<_16.childNodes.length;++i){ |
||
247 | if(_16.childNodes[i]===this.rawNode){ |
||
248 | _17=_16.childNodes[i+1];
|
||
249 | break;
|
||
250 | } |
||
251 | } |
||
252 | } |
||
253 | _16.removeChild(this.rawNode);
|
||
254 | } |
||
255 | if(d.isIE>7){ |
||
256 | var _18=this.rawNode.ownerDocument.createElement("v:roundrect"); |
||
257 | _18.arcsize=r; |
||
258 | _18.style.display="inline-block";
|
||
259 | this.rawNode=_18;
|
||
260 | }else{
|
||
261 | this.rawNode.arcsize=r;
|
||
262 | } |
||
263 | if(_16){
|
||
264 | if(_17){
|
||
265 | _16.insertBefore(this.rawNode,_17);
|
||
266 | }else{
|
||
267 | _16.appendChild(this.rawNode);
|
||
268 | } |
||
269 | } |
||
270 | var _19=this.rawNode.style; |
||
271 | _19.left=_15.x.toFixed(); |
||
272 | _19.top=_15.y.toFixed(); |
||
273 | _19.width=(typeof _15.width=="string"&&_15.width.indexOf("%")>=0)?_15.width:_15.width.toFixed(); |
||
274 | _19.height=(typeof _15.width=="string"&&_15.height.indexOf("%")>=0)?_15.height:_15.height.toFixed(); |
||
275 | return this.setTransform(this.matrix).setFill(this.fillStyle).setStroke(this.strokeStyle); |
||
276 | }}); |
||
277 | g.Rect.nodeType="roundrect";
|
||
278 | dojo.declare("dojox.gfx.Ellipse",gs.Ellipse,{setShape:function(_1a){ |
||
279 | var _1b=this.shape=g.makeParameters(this.shape,_1a); |
||
280 | this.bbox=null; |
||
281 | var _1c=this.rawNode.style; |
||
282 | _1c.left=(_1b.cx-_1b.rx).toFixed(); |
||
283 | _1c.top=(_1b.cy-_1b.ry).toFixed(); |
||
284 | _1c.width=(_1b.rx*2).toFixed();
|
||
285 | _1c.height=(_1b.ry*2).toFixed();
|
||
286 | return this.setTransform(this.matrix); |
||
287 | }}); |
||
288 | g.Ellipse.nodeType="oval";
|
||
289 | dojo.declare("dojox.gfx.Circle",gs.Circle,{setShape:function(_1d){ |
||
290 | var _1e=this.shape=g.makeParameters(this.shape,_1d); |
||
291 | this.bbox=null; |
||
292 | var _1f=this.rawNode.style; |
||
293 | _1f.left=(_1e.cx-_1e.r).toFixed(); |
||
294 | _1f.top=(_1e.cy-_1e.r).toFixed(); |
||
295 | _1f.width=(_1e.r*2).toFixed();
|
||
296 | _1f.height=(_1e.r*2).toFixed();
|
||
297 | return this; |
||
298 | }}); |
||
299 | g.Circle.nodeType="oval";
|
||
300 | dojo.declare("dojox.gfx.Line",gs.Line,{constructor:function(_20){ |
||
301 | if(_20){
|
||
302 | _20.setAttribute("dojoGfxType","line"); |
||
303 | } |
||
304 | },setShape:function(_21){ |
||
305 | var _22=this.shape=g.makeParameters(this.shape,_21); |
||
306 | this.bbox=null; |
||
307 | this.rawNode.path.v="m"+_22.x1.toFixed()+" "+_22.y1.toFixed()+"l"+_22.x2.toFixed()+" "+_22.y2.toFixed()+"e"; |
||
308 | return this.setTransform(this.matrix); |
||
309 | }}); |
||
310 | g.Line.nodeType="shape";
|
||
311 | dojo.declare("dojox.gfx.Polyline",gs.Polyline,{constructor:function(_23){ |
||
312 | if(_23){
|
||
313 | _23.setAttribute("dojoGfxType","polyline"); |
||
314 | } |
||
315 | },setShape:function(_24,_25){ |
||
316 | if(_24&&_24 instanceof Array){ |
||
317 | this.shape=g.makeParameters(this.shape,{points:_24}); |
||
318 | if(_25&&this.shape.points.length){ |
||
319 | this.shape.points.push(this.shape.points[0]); |
||
320 | } |
||
321 | }else{
|
||
322 | this.shape=g.makeParameters(this.shape,_24); |
||
323 | } |
||
324 | this.bbox=null; |
||
325 | this._normalizePoints();
|
||
326 | var _26=[],p=this.shape.points; |
||
327 | if(p.length>0){ |
||
328 | _26.push("m");
|
||
329 | _26.push(p[0].x.toFixed(),p[0].y.toFixed()); |
||
330 | if(p.length>1){ |
||
331 | _26.push("l");
|
||
332 | for(var i=1;i<p.length;++i){ |
||
333 | _26.push(p[i].x.toFixed(),p[i].y.toFixed()); |
||
334 | } |
||
335 | } |
||
336 | } |
||
337 | _26.push("e");
|
||
338 | this.rawNode.path.v=_26.join(" "); |
||
339 | return this.setTransform(this.matrix); |
||
340 | }}); |
||
341 | g.Polyline.nodeType="shape";
|
||
342 | dojo.declare("dojox.gfx.Image",gs.Image,{setShape:function(_27){ |
||
343 | var _28=this.shape=g.makeParameters(this.shape,_27); |
||
344 | this.bbox=null; |
||
345 | this.rawNode.firstChild.src=_28.src;
|
||
346 | return this.setTransform(this.matrix); |
||
347 | },_applyTransform:function(){ |
||
348 | var _29=this._getRealMatrix(),_2a=this.rawNode,s=_2a.style,_2b=this.shape; |
||
349 | if(_29){
|
||
350 | _29=m.multiply(_29,{dx:_2b.x,dy:_2b.y}); |
||
351 | }else{
|
||
352 | _29=m.normalize({dx:_2b.x,dy:_2b.y}); |
||
353 | } |
||
354 | if(_29.xy==0&&_29.yx==0&&_29.xx>0&&_29.yy>0){ |
||
355 | s.filter="";
|
||
356 | s.width=Math.floor(_29.xx*_2b.width); |
||
357 | s.height=Math.floor(_29.yy*_2b.height); |
||
358 | s.left=Math.floor(_29.dx); |
||
359 | s.top=Math.floor(_29.dy); |
||
360 | }else{
|
||
361 | var ps=_2a.parentNode.style;
|
||
362 | s.left="0px";
|
||
363 | s.top="0px";
|
||
364 | s.width=ps.width; |
||
365 | s.height=ps.height; |
||
366 | _29=m.multiply(_29,{xx:_2b.width/parseInt(s.width),yy:_2b.height/parseInt(s.height)}); |
||
367 | var f=_2a.filters["DXImageTransform.Microsoft.Matrix"]; |
||
368 | if(f){
|
||
369 | f.M11=_29.xx; |
||
370 | f.M12=_29.xy; |
||
371 | f.M21=_29.yx; |
||
372 | f.M22=_29.yy; |
||
373 | f.Dx=_29.dx; |
||
374 | f.Dy=_29.dy; |
||
375 | }else{
|
||
376 | s.filter="progid:DXImageTransform.Microsoft.Matrix(M11="+_29.xx+", M12="+_29.xy+", M21="+_29.yx+", M22="+_29.yy+", Dx="+_29.dx+", Dy="+_29.dy+")"; |
||
377 | } |
||
378 | } |
||
379 | return this; |
||
380 | },_setDimensions:function(_2c,_2d){ |
||
381 | var r=this.rawNode,f=r.filters["DXImageTransform.Microsoft.Matrix"]; |
||
382 | if(f){
|
||
383 | var s=r.style;
|
||
384 | s.width=_2c; |
||
385 | s.height=_2d; |
||
386 | return this._applyTransform(); |
||
387 | } |
||
388 | return this; |
||
389 | }}); |
||
390 | g.Image.nodeType="rect";
|
||
391 | dojo.declare("dojox.gfx.Text",gs.Text,{constructor:function(_2e){ |
||
392 | if(_2e){
|
||
393 | _2e.setAttribute("dojoGfxType","text"); |
||
394 | } |
||
395 | this.fontStyle=null; |
||
396 | },_alignment:{start:"left",middle:"center",end:"right"},setShape:function(_2f){ |
||
397 | this.shape=g.makeParameters(this.shape,_2f); |
||
398 | this.bbox=null; |
||
399 | var r=this.rawNode,s=this.shape,x=s.x,y=s.y.toFixed(),_30; |
||
400 | switch(s.align){
|
||
401 | case "middle": |
||
402 | x-=5;
|
||
403 | break;
|
||
404 | case "end": |
||
405 | x-=10;
|
||
406 | break;
|
||
407 | } |
||
408 | _30="m"+x.toFixed()+","+y+"l"+(x+10).toFixed()+","+y+"e"; |
||
409 | var p=null,t=null,c=r.childNodes; |
||
410 | for(var i=0;i<c.length;++i){ |
||
411 | var tag=c[i].tagName;
|
||
412 | if(tag=="path"){ |
||
413 | p=c[i]; |
||
414 | if(t){
|
||
415 | break;
|
||
416 | } |
||
417 | }else{
|
||
418 | if(tag=="textpath"){ |
||
419 | t=c[i]; |
||
420 | if(p){
|
||
421 | break;
|
||
422 | } |
||
423 | } |
||
424 | } |
||
425 | } |
||
426 | if(!p){
|
||
427 | p=r.ownerDocument.createElement("v:path");
|
||
428 | r.appendChild(p); |
||
429 | } |
||
430 | if(!t){
|
||
431 | t=r.ownerDocument.createElement("v:textpath");
|
||
432 | r.appendChild(t); |
||
433 | } |
||
434 | p.v=_30; |
||
435 | p.textPathOk=true;
|
||
436 | t.on=true;
|
||
437 | var a=_1.text_alignment[s.align];
|
||
438 | t.style["v-text-align"]=a?a:"left"; |
||
439 | t.style["text-decoration"]=s.decoration;
|
||
440 | t.style["v-rotate-letters"]=s.rotated;
|
||
441 | t.style["v-text-kern"]=s.kerning;
|
||
442 | t.string=s.text; |
||
443 | return this.setTransform(this.matrix); |
||
444 | },_setFont:function(){ |
||
445 | var f=this.fontStyle,c=this.rawNode.childNodes; |
||
446 | for(var i=0;i<c.length;++i){ |
||
447 | if(c[i].tagName=="textpath"){ |
||
448 | c[i].style.font=g.makeFontString(f); |
||
449 | break;
|
||
450 | } |
||
451 | } |
||
452 | this.setTransform(this.matrix); |
||
453 | },_getRealMatrix:function(){ |
||
454 | var _31=g.Shape.prototype._getRealMatrix.call(this); |
||
455 | if(_31){
|
||
456 | _31=m.multiply(_31,{dy:-g.normalizedLength(this.fontStyle?this.fontStyle.size:"10pt")*0.35}); |
||
457 | } |
||
458 | return _31;
|
||
459 | },getTextWidth:function(){ |
||
460 | var _32=this.rawNode,_33=_32.style.display; |
||
461 | _32.style.display="inline";
|
||
462 | var _34=g.pt2px(parseFloat(_32.currentStyle.width));
|
||
463 | _32.style.display=_33; |
||
464 | return _34;
|
||
465 | }}); |
||
466 | g.Text.nodeType="shape";
|
||
467 | dojo.declare("dojox.gfx.Path",g.path.Path,{constructor:function(_35){ |
||
468 | if(_35&&!_35.getAttribute("dojoGfxType")){ |
||
469 | _35.setAttribute("dojoGfxType","path"); |
||
470 | } |
||
471 | this.vmlPath=""; |
||
472 | this.lastControl={};
|
||
473 | },_updateWithSegment:function(_36){ |
||
474 | var _37=d.clone(this.last); |
||
475 | g.Path.superclass._updateWithSegment.apply(this,arguments); |
||
476 | if(arguments.length>1){ |
||
477 | return;
|
||
478 | } |
||
479 | var _38=this[this.renderers[_36.action]](_36,_37); |
||
480 | if(typeof this.vmlPath=="string"){ |
||
481 | this.vmlPath+=_38.join(""); |
||
482 | this.rawNode.path.v=this.vmlPath+" r0,0 e"; |
||
483 | }else{
|
||
484 | Array.prototype.push.apply(this.vmlPath,_38);
|
||
485 | } |
||
486 | },setShape:function(_39){ |
||
487 | this.vmlPath=[];
|
||
488 | this.lastControl.type=""; |
||
489 | g.Path.superclass.setShape.apply(this,arguments); |
||
490 | this.vmlPath=this.vmlPath.join(""); |
||
491 | this.rawNode.path.v=this.vmlPath+" r0,0 e"; |
||
492 | return this; |
||
493 | },_pathVmlToSvgMap:{m:"M",l:"L",t:"m",r:"l",c:"C",v:"c",qb:"Q",x:"z",e:""},renderers:{M:"_moveToA",m:"_moveToR",L:"_lineToA",l:"_lineToR",H:"_hLineToA",h:"_hLineToR",V:"_vLineToA",v:"_vLineToR",C:"_curveToA",c:"_curveToR",S:"_smoothCurveToA",s:"_smoothCurveToR",Q:"_qCurveToA",q:"_qCurveToR",T:"_qSmoothCurveToA",t:"_qSmoothCurveToR",A:"_arcTo",a:"_arcTo",Z:"_closePath",z:"_closePath"},_addArgs:function(_3a,_3b,_3c,_3d){ |
||
494 | var n=_3b instanceof Array?_3b:_3b.args; |
||
495 | for(var i=_3c;i<_3d;++i){ |
||
496 | _3a.push(" ",n[i].toFixed());
|
||
497 | } |
||
498 | },_adjustRelCrd:function(_3e,_3f,_40){ |
||
499 | var n=_3f instanceof Array?_3f:_3f.args,l=n.length,_41=new Array(l),i=0,x=_3e.x,y=_3e.y; |
||
500 | if(typeof x!="number"){ |
||
501 | _41[0]=x=n[0]; |
||
502 | _41[1]=y=n[1]; |
||
503 | i=2;
|
||
504 | } |
||
505 | if(typeof _40=="number"&&_40!=2){ |
||
506 | var j=_40;
|
||
507 | while(j<=l){
|
||
508 | for(;i<j;i+=2){ |
||
509 | _41[i]=x+n[i]; |
||
510 | _41[i+1]=y+n[i+1]; |
||
511 | } |
||
512 | x=_41[j-2];
|
||
513 | y=_41[j-1];
|
||
514 | j+=_40; |
||
515 | } |
||
516 | }else{
|
||
517 | for(;i<l;i+=2){ |
||
518 | _41[i]=(x+=n[i]); |
||
519 | _41[i+1]=(y+=n[i+1]); |
||
520 | } |
||
521 | } |
||
522 | return _41;
|
||
523 | },_adjustRelPos:function(_42,_43){ |
||
524 | var n=_43 instanceof Array?_43:_43.args,l=n.length,_44=new Array(l); |
||
525 | for(var i=0;i<l;++i){ |
||
526 | _44[i]=(_42+=n[i]); |
||
527 | } |
||
528 | return _44;
|
||
529 | },_moveToA:function(_45){ |
||
530 | var p=[" m"],n=_45 instanceof Array?_45:_45.args,l=n.length; |
||
531 | this._addArgs(p,n,0,2); |
||
532 | if(l>2){ |
||
533 | p.push(" l");
|
||
534 | this._addArgs(p,n,2,l); |
||
535 | } |
||
536 | this.lastControl.type=""; |
||
537 | return p;
|
||
538 | },_moveToR:function(_46,_47){ |
||
539 | return this._moveToA(this._adjustRelCrd(_47,_46)); |
||
540 | },_lineToA:function(_48){ |
||
541 | var p=[" l"],n=_48 instanceof Array?_48:_48.args; |
||
542 | this._addArgs(p,n,0,n.length); |
||
543 | this.lastControl.type=""; |
||
544 | return p;
|
||
545 | },_lineToR:function(_49,_4a){ |
||
546 | return this._lineToA(this._adjustRelCrd(_4a,_49)); |
||
547 | },_hLineToA:function(_4b,_4c){ |
||
548 | var p=[" l"],y=" "+_4c.y.toFixed(),n=_4b instanceof Array?_4b:_4b.args,l=n.length; |
||
549 | for(var i=0;i<l;++i){ |
||
550 | p.push(" ",n[i].toFixed(),y);
|
||
551 | } |
||
552 | this.lastControl.type=""; |
||
553 | return p;
|
||
554 | },_hLineToR:function(_4d,_4e){ |
||
555 | return this._hLineToA(this._adjustRelPos(_4e.x,_4d),_4e); |
||
556 | },_vLineToA:function(_4f,_50){ |
||
557 | var p=[" l"],x=" "+_50.x.toFixed(),n=_4f instanceof Array?_4f:_4f.args,l=n.length; |
||
558 | for(var i=0;i<l;++i){ |
||
559 | p.push(x," ",n[i].toFixed());
|
||
560 | } |
||
561 | this.lastControl.type=""; |
||
562 | return p;
|
||
563 | },_vLineToR:function(_51,_52){ |
||
564 | return this._vLineToA(this._adjustRelPos(_52.y,_51),_52); |
||
565 | },_curveToA:function(_53){ |
||
566 | var p=[],n=_53 instanceof Array?_53:_53.args,l=n.length,lc=this.lastControl; |
||
567 | for(var i=0;i<l;i+=6){ |
||
568 | p.push(" c");
|
||
569 | this._addArgs(p,n,i,i+6); |
||
570 | } |
||
571 | lc.x=n[l-4];
|
||
572 | lc.y=n[l-3];
|
||
573 | lc.type="C";
|
||
574 | return p;
|
||
575 | },_curveToR:function(_54,_55){ |
||
576 | return this._curveToA(this._adjustRelCrd(_55,_54,6)); |
||
577 | },_smoothCurveToA:function(_56,_57){ |
||
578 | var p=[],n=_56 instanceof Array?_56:_56.args,l=n.length,lc=this.lastControl,i=0; |
||
579 | if(lc.type!="C"){ |
||
580 | p.push(" c");
|
||
581 | this._addArgs(p,[_57.x,_57.y],0,2); |
||
582 | this._addArgs(p,n,0,4); |
||
583 | lc.x=n[0];
|
||
584 | lc.y=n[1];
|
||
585 | lc.type="C";
|
||
586 | i=4;
|
||
587 | } |
||
588 | for(;i<l;i+=4){ |
||
589 | p.push(" c");
|
||
590 | this._addArgs(p,[2*_57.x-lc.x,2*_57.y-lc.y],0,2); |
||
591 | this._addArgs(p,n,i,i+4); |
||
592 | lc.x=n[i]; |
||
593 | lc.y=n[i+1];
|
||
594 | } |
||
595 | return p;
|
||
596 | },_smoothCurveToR:function(_58,_59){ |
||
597 | return this._smoothCurveToA(this._adjustRelCrd(_59,_58,4),_59); |
||
598 | },_qCurveToA:function(_5a){ |
||
599 | var p=[],n=_5a instanceof Array?_5a:_5a.args,l=n.length,lc=this.lastControl; |
||
600 | for(var i=0;i<l;i+=4){ |
||
601 | p.push(" qb");
|
||
602 | this._addArgs(p,n,i,i+4); |
||
603 | } |
||
604 | lc.x=n[l-4];
|
||
605 | lc.y=n[l-3];
|
||
606 | lc.type="Q";
|
||
607 | return p;
|
||
608 | },_qCurveToR:function(_5b,_5c){ |
||
609 | return this._qCurveToA(this._adjustRelCrd(_5c,_5b,4)); |
||
610 | },_qSmoothCurveToA:function(_5d,_5e){ |
||
611 | var p=[],n=_5d instanceof Array?_5d:_5d.args,l=n.length,lc=this.lastControl,i=0; |
||
612 | if(lc.type!="Q"){ |
||
613 | p.push(" qb");
|
||
614 | this._addArgs(p,[lc.x=_5e.x,lc.y=_5e.y],0,2); |
||
615 | lc.type="Q";
|
||
616 | this._addArgs(p,n,0,2); |
||
617 | i=2;
|
||
618 | } |
||
619 | for(;i<l;i+=2){ |
||
620 | p.push(" qb");
|
||
621 | this._addArgs(p,[lc.x=2*_5e.x-lc.x,lc.y=2*_5e.y-lc.y],0,2); |
||
622 | this._addArgs(p,n,i,i+2); |
||
623 | } |
||
624 | return p;
|
||
625 | },_qSmoothCurveToR:function(_5f,_60){ |
||
626 | return this._qSmoothCurveToA(this._adjustRelCrd(_60,_5f,2),_60); |
||
627 | },_arcTo:function(_61,_62){ |
||
628 | var p=[],n=_61.args,l=n.length,_63=_61.action=="a"; |
||
629 | for(var i=0;i<l;i+=7){ |
||
630 | var x1=n[i+5],y1=n[i+6]; |
||
631 | if(_63){
|
||
632 | x1+=_62.x; |
||
633 | y1+=_62.y; |
||
634 | } |
||
635 | var _64=g.arc.arcAsBezier(_62,n[i],n[i+1],n[i+2],n[i+3]?1:0,n[i+4]?1:0,x1,y1); |
||
636 | for(var j=0;j<_64.length;++j){ |
||
637 | p.push(" c");
|
||
638 | var t=_64[j];
|
||
639 | this._addArgs(p,t,0,t.length); |
||
640 | this._updateBBox(t[0],t[1]); |
||
641 | this._updateBBox(t[2],t[3]); |
||
642 | this._updateBBox(t[4],t[5]); |
||
643 | } |
||
644 | _62.x=x1; |
||
645 | _62.y=y1; |
||
646 | } |
||
647 | this.lastControl.type=""; |
||
648 | return p;
|
||
649 | },_closePath:function(){ |
||
650 | this.lastControl.type=""; |
||
651 | return ["x"]; |
||
652 | }}); |
||
653 | g.Path.nodeType="shape";
|
||
654 | dojo.declare("dojox.gfx.TextPath",g.Path,{constructor:function(_65){ |
||
655 | if(_65){
|
||
656 | _65.setAttribute("dojoGfxType","textpath"); |
||
657 | } |
||
658 | this.fontStyle=null; |
||
659 | if(!("text" in this)){ |
||
660 | this.text=d.clone(g.defaultTextPath);
|
||
661 | } |
||
662 | if(!("fontStyle" in this)){ |
||
663 | this.fontStyle=d.clone(g.defaultFont);
|
||
664 | } |
||
665 | },setText:function(_66){ |
||
666 | this.text=g.makeParameters(this.text,typeof _66=="string"?{text:_66}:_66); |
||
667 | this._setText();
|
||
668 | return this; |
||
669 | },setFont:function(_67){ |
||
670 | this.fontStyle=typeof _67=="string"?g.splitFontString(_67):g.makeParameters(g.defaultFont,_67); |
||
671 | this._setFont();
|
||
672 | return this; |
||
673 | },_setText:function(){ |
||
674 | this.bbox=null; |
||
675 | var r=this.rawNode,s=this.text,p=null,t=null,c=r.childNodes; |
||
676 | for(var i=0;i<c.length;++i){ |
||
677 | var tag=c[i].tagName;
|
||
678 | if(tag=="path"){ |
||
679 | p=c[i]; |
||
680 | if(t){
|
||
681 | break;
|
||
682 | } |
||
683 | }else{
|
||
684 | if(tag=="textpath"){ |
||
685 | t=c[i]; |
||
686 | if(p){
|
||
687 | break;
|
||
688 | } |
||
689 | } |
||
690 | } |
||
691 | } |
||
692 | if(!p){
|
||
693 | p=this.rawNode.ownerDocument.createElement("v:path"); |
||
694 | r.appendChild(p); |
||
695 | } |
||
696 | if(!t){
|
||
697 | t=this.rawNode.ownerDocument.createElement("v:textpath"); |
||
698 | r.appendChild(t); |
||
699 | } |
||
700 | p.textPathOk=true;
|
||
701 | t.on=true;
|
||
702 | var a=_1.text_alignment[s.align];
|
||
703 | t.style["v-text-align"]=a?a:"left"; |
||
704 | t.style["text-decoration"]=s.decoration;
|
||
705 | t.style["v-rotate-letters"]=s.rotated;
|
||
706 | t.style["v-text-kern"]=s.kerning;
|
||
707 | t.string=s.text; |
||
708 | },_setFont:function(){ |
||
709 | var f=this.fontStyle,c=this.rawNode.childNodes; |
||
710 | for(var i=0;i<c.length;++i){ |
||
711 | if(c[i].tagName=="textpath"){ |
||
712 | c[i].style.font=g.makeFontString(f); |
||
713 | break;
|
||
714 | } |
||
715 | } |
||
716 | }}); |
||
717 | g.TextPath.nodeType="shape";
|
||
718 | dojo.declare("dojox.gfx.Surface",gs.Surface,{constructor:function(){ |
||
719 | _1.Container._init.call(this);
|
||
720 | },setDimensions:function(_68,_69){ |
||
721 | this.width=g.normalizedLength(_68);
|
||
722 | this.height=g.normalizedLength(_69);
|
||
723 | if(!this.rawNode){ |
||
724 | return this; |
||
725 | } |
||
726 | var cs=this.clipNode.style,r=this.rawNode,rs=r.style,bs=this.bgNode.style,ps=this._parent.style,i; |
||
727 | ps.width=_68; |
||
728 | ps.height=_69; |
||
729 | cs.width=_68; |
||
730 | cs.height=_69; |
||
731 | cs.clip="rect(0px "+_68+"px "+_69+"px 0px)"; |
||
732 | rs.width=_68; |
||
733 | rs.height=_69; |
||
734 | r.coordsize=_68+" "+_69;
|
||
735 | bs.width=_68; |
||
736 | bs.height=_69; |
||
737 | for(i=0;i<this.children.length;++i){ |
||
738 | this.children[i]._setDimensions(_68,_69);
|
||
739 | } |
||
740 | return this; |
||
741 | },getDimensions:function(){ |
||
742 | var t=this.rawNode?{width:g.normalizedLength(this.rawNode.style.width),height:g.normalizedLength(this.rawNode.style.height)}:null; |
||
743 | if(t.width<=0){ |
||
744 | t.width=this.width;
|
||
745 | } |
||
746 | if(t.height<=0){ |
||
747 | t.height=this.height;
|
||
748 | } |
||
749 | return t;
|
||
750 | }}); |
||
751 | g.createSurface=function(_6a,_6b,_6c){ |
||
752 | if(!_6b&&!_6c){
|
||
753 | var pos=d.position(_6a);
|
||
754 | _6b=_6b||pos.w; |
||
755 | _6c=_6c||pos.h; |
||
756 | } |
||
757 | if(typeof _6b=="number"){ |
||
758 | _6b=_6b+"px";
|
||
759 | } |
||
760 | if(typeof _6c=="number"){ |
||
761 | _6c=_6c+"px";
|
||
762 | } |
||
763 | var s=new g.Surface(),p=d.byId(_6a),c=s.clipNode=p.ownerDocument.createElement("div"),r=s.rawNode=p.ownerDocument.createElement("v:group"),cs=c.style,rs=r.style; |
||
764 | if(d.isIE>7){ |
||
765 | rs.display="inline-block";
|
||
766 | } |
||
767 | s._parent=p; |
||
768 | s._nodes.push(c); |
||
769 | p.style.width=_6b; |
||
770 | p.style.height=_6c; |
||
771 | cs.position="absolute";
|
||
772 | cs.width=_6b; |
||
773 | cs.height=_6c; |
||
774 | cs.clip="rect(0px "+_6b+" "+_6c+" 0px)"; |
||
775 | rs.position="absolute";
|
||
776 | rs.width=_6b; |
||
777 | rs.height=_6c; |
||
778 | r.coordsize=(_6b==="100%"?_6b:parseFloat(_6b))+" "+(_6c==="100%"?_6c:parseFloat(_6c)); |
||
779 | r.coordorigin="0 0";
|
||
780 | var b=s.bgNode=r.ownerDocument.createElement("v:rect"),bs=b.style; |
||
781 | bs.left=bs.top=0;
|
||
782 | bs.width=rs.width; |
||
783 | bs.height=rs.height; |
||
784 | b.filled=b.stroked="f";
|
||
785 | r.appendChild(b); |
||
786 | c.appendChild(r); |
||
787 | p.appendChild(c); |
||
788 | s.width=g.normalizedLength(_6b); |
||
789 | s.height=g.normalizedLength(_6c); |
||
790 | return s;
|
||
791 | }; |
||
792 | _1.Container={_init:function(){ |
||
793 | gs.Container._init.call(this);
|
||
794 | },add:function(_6d){ |
||
795 | if(this!=_6d.getParent()){ |
||
796 | this.rawNode.appendChild(_6d.rawNode);
|
||
797 | if(!_6d.getParent()){
|
||
798 | _6d.setFill(_6d.getFill()); |
||
799 | _6d.setStroke(_6d.getStroke()); |
||
800 | } |
||
801 | gs.Container.add.apply(this,arguments); |
||
802 | } |
||
803 | return this; |
||
804 | },remove:function(_6e,_6f){ |
||
805 | if(this==_6e.getParent()){ |
||
806 | if(this.rawNode==_6e.rawNode.parentNode){ |
||
807 | this.rawNode.removeChild(_6e.rawNode);
|
||
808 | } |
||
809 | gs.Container.remove.apply(this,arguments); |
||
810 | } |
||
811 | return this; |
||
812 | },clear:function(){ |
||
813 | var r=this.rawNode; |
||
814 | while(r.firstChild!=r.lastChild){
|
||
815 | if(r.firstChild!=this.bgNode){ |
||
816 | r.removeChild(r.firstChild); |
||
817 | } |
||
818 | if(r.lastChild!=this.bgNode){ |
||
819 | r.removeChild(r.lastChild); |
||
820 | } |
||
821 | } |
||
822 | return gs.Container.clear.apply(this,arguments); |
||
823 | },_moveChildToFront:gs.Container._moveChildToFront,_moveChildToBack:gs.Container._moveChildToBack}; |
||
824 | dojo.mixin(gs.Creator,{createGroup:function(){ |
||
825 | var _70=this.createObject(g.Group,null); |
||
826 | var r=_70.rawNode.ownerDocument.createElement("v:rect"); |
||
827 | r.style.left=r.style.top=0;
|
||
828 | r.style.width=_70.rawNode.style.width; |
||
829 | r.style.height=_70.rawNode.style.height; |
||
830 | r.filled=r.stroked="f";
|
||
831 | _70.rawNode.appendChild(r); |
||
832 | _70.bgNode=r; |
||
833 | return _70;
|
||
834 | },createImage:function(_71){ |
||
835 | if(!this.rawNode){ |
||
836 | return null; |
||
837 | } |
||
838 | var _72=new g.Image(),doc=this.rawNode.ownerDocument,_73=doc.createElement("v:rect"); |
||
839 | _73.stroked="f";
|
||
840 | _73.style.width=this.rawNode.style.width;
|
||
841 | _73.style.height=this.rawNode.style.height;
|
||
842 | var img=doc.createElement("v:imagedata"); |
||
843 | _73.appendChild(img); |
||
844 | _72.setRawNode(_73); |
||
845 | this.rawNode.appendChild(_73);
|
||
846 | _72.setShape(_71); |
||
847 | this.add(_72);
|
||
848 | return _72;
|
||
849 | },createRect:function(_74){ |
||
850 | if(!this.rawNode){ |
||
851 | return null; |
||
852 | } |
||
853 | var _75=new g.Rect,_76=this.rawNode.ownerDocument.createElement("v:roundrect"); |
||
854 | if(d.isIE>7){ |
||
855 | _76.style.display="inline-block";
|
||
856 | } |
||
857 | _75.setRawNode(_76); |
||
858 | this.rawNode.appendChild(_76);
|
||
859 | _75.setShape(_74); |
||
860 | this.add(_75);
|
||
861 | return _75;
|
||
862 | },createObject:function(_77,_78){ |
||
863 | if(!this.rawNode){ |
||
864 | return null; |
||
865 | } |
||
866 | var _79=new _77(),_7a=this.rawNode.ownerDocument.createElement("v:"+_77.nodeType); |
||
867 | _79.setRawNode(_7a); |
||
868 | this.rawNode.appendChild(_7a);
|
||
869 | switch(_77){
|
||
870 | case g.Group:
|
||
871 | case g.Line:
|
||
872 | case g.Polyline:
|
||
873 | case g.Image:
|
||
874 | case g.Text:
|
||
875 | case g.Path:
|
||
876 | case g.TextPath:
|
||
877 | this._overrideSize(_7a);
|
||
878 | } |
||
879 | _79.setShape(_78); |
||
880 | this.add(_79);
|
||
881 | return _79;
|
||
882 | },_overrideSize:function(_7b){ |
||
883 | var s=this.rawNode.style,w=s.width,h=s.height; |
||
884 | _7b.style.width=w; |
||
885 | _7b.style.height=h; |
||
886 | _7b.coordsize=parseInt(w)+" "+parseInt(h);
|
||
887 | }}); |
||
888 | d.extend(g.Group,_1.Container); |
||
889 | d.extend(g.Group,gs.Creator); |
||
890 | d.extend(g.Surface,_1.Container); |
||
891 | d.extend(g.Surface,gs.Creator); |
||
892 | })(); |
||
893 | } |