root / trunk / web / dojo / dojox / gfx / shape.js @ 11
History | View | Annotate | Download (9.45 KB)
| 1 |
/*
|
|---|---|
| 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.shape"]){ |
| 9 |
dojo._hasResource["dojox.gfx.shape"]=true; |
| 10 |
dojo.provide("dojox.gfx.shape");
|
| 11 |
dojo.require("dojox.gfx._base");
|
| 12 |
dojo.declare("dojox.gfx.Shape",null,{constructor:function(){ |
| 13 |
this.rawNode=null; |
| 14 |
this.shape=null; |
| 15 |
this.matrix=null; |
| 16 |
this.fillStyle=null; |
| 17 |
this.strokeStyle=null; |
| 18 |
this.bbox=null; |
| 19 |
this.parent=null; |
| 20 |
this.parentMatrix=null; |
| 21 |
},getNode:function(){ |
| 22 |
return this.rawNode; |
| 23 |
},getShape:function(){ |
| 24 |
return this.shape; |
| 25 |
},getTransform:function(){ |
| 26 |
return this.matrix; |
| 27 |
},getFill:function(){ |
| 28 |
return this.fillStyle; |
| 29 |
},getStroke:function(){ |
| 30 |
return this.strokeStyle; |
| 31 |
},getParent:function(){ |
| 32 |
return this.parent; |
| 33 |
},getBoundingBox:function(){ |
| 34 |
return this.bbox; |
| 35 |
},getTransformedBoundingBox:function(){ |
| 36 |
var b=this.getBoundingBox(); |
| 37 |
if(!b){
|
| 38 |
return null; |
| 39 |
} |
| 40 |
var m=this._getRealMatrix(); |
| 41 |
gm=dojox.gfx.matrix; |
| 42 |
return [gm.multiplyPoint(m,b.x,b.y),gm.multiplyPoint(m,b.x+b.width,b.y),gm.multiplyPoint(m,b.x+b.width,b.y+b.height),gm.multiplyPoint(m,b.x,b.y+b.height)];
|
| 43 |
},getEventSource:function(){ |
| 44 |
return this.rawNode; |
| 45 |
},setShape:function(_1){ |
| 46 |
this.shape=dojox.gfx.makeParameters(this.shape,_1); |
| 47 |
this.bbox=null; |
| 48 |
return this; |
| 49 |
},setFill:function(_2){ |
| 50 |
if(!_2){
|
| 51 |
this.fillStyle=null; |
| 52 |
return this; |
| 53 |
} |
| 54 |
var f=null; |
| 55 |
if(typeof (_2)=="object"&&"type" in _2){ |
| 56 |
switch(_2.type){
|
| 57 |
case "linear": |
| 58 |
f=dojox.gfx.makeParameters(dojox.gfx.defaultLinearGradient,_2); |
| 59 |
break;
|
| 60 |
case "radial": |
| 61 |
f=dojox.gfx.makeParameters(dojox.gfx.defaultRadialGradient,_2); |
| 62 |
break;
|
| 63 |
case "pattern": |
| 64 |
f=dojox.gfx.makeParameters(dojox.gfx.defaultPattern,_2); |
| 65 |
break;
|
| 66 |
} |
| 67 |
}else{
|
| 68 |
f=dojox.gfx.normalizeColor(_2); |
| 69 |
} |
| 70 |
this.fillStyle=f;
|
| 71 |
return this; |
| 72 |
},setStroke:function(_3){ |
| 73 |
if(!_3){
|
| 74 |
this.strokeStyle=null; |
| 75 |
return this; |
| 76 |
} |
| 77 |
if(typeof _3=="string"||dojo.isArray(_3)||_3 instanceof dojo.Color){ |
| 78 |
_3={color:_3};
|
| 79 |
} |
| 80 |
var s=this.strokeStyle=dojox.gfx.makeParameters(dojox.gfx.defaultStroke,_3); |
| 81 |
s.color=dojox.gfx.normalizeColor(s.color); |
| 82 |
return this; |
| 83 |
},setTransform:function(_4){ |
| 84 |
this.matrix=dojox.gfx.matrix.clone(_4?dojox.gfx.matrix.normalize(_4):dojox.gfx.matrix.identity);
|
| 85 |
return this._applyTransform(); |
| 86 |
},_applyTransform:function(){ |
| 87 |
return this; |
| 88 |
},moveToFront:function(){ |
| 89 |
var p=this.getParent(); |
| 90 |
if(p){
|
| 91 |
p._moveChildToFront(this);
|
| 92 |
this._moveToFront();
|
| 93 |
} |
| 94 |
return this; |
| 95 |
},moveToBack:function(){ |
| 96 |
var p=this.getParent(); |
| 97 |
if(p){
|
| 98 |
p._moveChildToBack(this);
|
| 99 |
this._moveToBack();
|
| 100 |
} |
| 101 |
return this; |
| 102 |
},_moveToFront:function(){ |
| 103 |
},_moveToBack:function(){ |
| 104 |
},applyRightTransform:function(_5){ |
| 105 |
return _5?this.setTransform([this.matrix,_5]):this; |
| 106 |
},applyLeftTransform:function(_6){ |
| 107 |
return _6?this.setTransform([_6,this.matrix]):this; |
| 108 |
},applyTransform:function(_7){ |
| 109 |
return _7?this.setTransform([this.matrix,_7]):this; |
| 110 |
},removeShape:function(_8){ |
| 111 |
if(this.parent){ |
| 112 |
this.parent.remove(this,_8); |
| 113 |
} |
| 114 |
return this; |
| 115 |
},_setParent:function(_9,_a){ |
| 116 |
this.parent=_9;
|
| 117 |
return this._updateParentMatrix(_a); |
| 118 |
},_updateParentMatrix:function(_b){ |
| 119 |
this.parentMatrix=_b?dojox.gfx.matrix.clone(_b):null; |
| 120 |
return this._applyTransform(); |
| 121 |
},_getRealMatrix:function(){ |
| 122 |
var m=this.matrix; |
| 123 |
var p=this.parent; |
| 124 |
while(p){
|
| 125 |
if(p.matrix){
|
| 126 |
m=dojox.gfx.matrix.multiply(p.matrix,m); |
| 127 |
} |
| 128 |
p=p.parent; |
| 129 |
} |
| 130 |
return m;
|
| 131 |
}}); |
| 132 |
dojox.gfx.shape._eventsProcessing={connect:function(_c,_d,_e){
|
| 133 |
return arguments.length>2?dojo.connect(this.getEventSource(),_c,_d,_e):dojo.connect(this.getEventSource(),_c,_d); |
| 134 |
},disconnect:function(_f){ |
| 135 |
dojo.disconnect(_f); |
| 136 |
}}; |
| 137 |
dojo.extend(dojox.gfx.Shape,dojox.gfx.shape._eventsProcessing); |
| 138 |
dojox.gfx.shape.Container={_init:function(){
|
| 139 |
this.children=[];
|
| 140 |
},openBatch:function(){ |
| 141 |
},closeBatch:function(){ |
| 142 |
},add:function(_10){ |
| 143 |
var _11=_10.getParent();
|
| 144 |
if(_11){
|
| 145 |
_11.remove(_10,true);
|
| 146 |
} |
| 147 |
this.children.push(_10);
|
| 148 |
return _10._setParent(this,this._getRealMatrix()); |
| 149 |
},remove:function(_12,_13){ |
| 150 |
for(var i=0;i<this.children.length;++i){ |
| 151 |
if(this.children[i]==_12){ |
| 152 |
if(_13){
|
| 153 |
}else{
|
| 154 |
_12.parent=null;
|
| 155 |
_12.parentMatrix=null;
|
| 156 |
} |
| 157 |
this.children.splice(i,1); |
| 158 |
break;
|
| 159 |
} |
| 160 |
} |
| 161 |
return this; |
| 162 |
},clear:function(){ |
| 163 |
this.children=[];
|
| 164 |
return this; |
| 165 |
},_moveChildToFront:function(_14){ |
| 166 |
for(var i=0;i<this.children.length;++i){ |
| 167 |
if(this.children[i]==_14){ |
| 168 |
this.children.splice(i,1); |
| 169 |
this.children.push(_14);
|
| 170 |
break;
|
| 171 |
} |
| 172 |
} |
| 173 |
return this; |
| 174 |
},_moveChildToBack:function(_15){ |
| 175 |
for(var i=0;i<this.children.length;++i){ |
| 176 |
if(this.children[i]==_15){ |
| 177 |
this.children.splice(i,1); |
| 178 |
this.children.unshift(_15);
|
| 179 |
break;
|
| 180 |
} |
| 181 |
} |
| 182 |
return this; |
| 183 |
}}; |
| 184 |
dojo.declare("dojox.gfx.shape.Surface",null,{constructor:function(){ |
| 185 |
this.rawNode=null; |
| 186 |
this._parent=null; |
| 187 |
this._nodes=[];
|
| 188 |
this._events=[];
|
| 189 |
},destroy:function(){ |
| 190 |
dojo.forEach(this._nodes,dojo.destroy);
|
| 191 |
this._nodes=[];
|
| 192 |
dojo.forEach(this._events,dojo.disconnect);
|
| 193 |
this._events=[];
|
| 194 |
this.rawNode=null; |
| 195 |
if(dojo.isIE){
|
| 196 |
while(this._parent.lastChild){ |
| 197 |
dojo.destroy(this._parent.lastChild);
|
| 198 |
} |
| 199 |
}else{
|
| 200 |
this._parent.innerHTML=""; |
| 201 |
} |
| 202 |
this._parent=null; |
| 203 |
},getEventSource:function(){ |
| 204 |
return this.rawNode; |
| 205 |
},_getRealMatrix:function(){ |
| 206 |
return null; |
| 207 |
},isLoaded:true,onLoad:function(_16){ |
| 208 |
},whenLoaded:function(_17,_18){ |
| 209 |
var f=dojo.hitch(_17,_18);
|
| 210 |
if(this.isLoaded){ |
| 211 |
f(this);
|
| 212 |
}else{
|
| 213 |
var h=dojo.connect(this,"onLoad",function(_19){ |
| 214 |
dojo.disconnect(h); |
| 215 |
f(_19); |
| 216 |
}); |
| 217 |
} |
| 218 |
}}); |
| 219 |
dojo.extend(dojox.gfx.shape.Surface,dojox.gfx.shape._eventsProcessing); |
| 220 |
dojo.declare("dojox.gfx.Point",null,{}); |
| 221 |
dojo.declare("dojox.gfx.Rectangle",null,{}); |
| 222 |
dojo.declare("dojox.gfx.shape.Rect",dojox.gfx.Shape,{constructor:function(_1a){ |
| 223 |
this.shape=dojox.gfx.getDefault("Rect"); |
| 224 |
this.rawNode=_1a;
|
| 225 |
},getBoundingBox:function(){ |
| 226 |
return this.shape; |
| 227 |
}}); |
| 228 |
dojo.declare("dojox.gfx.shape.Ellipse",dojox.gfx.Shape,{constructor:function(_1b){ |
| 229 |
this.shape=dojox.gfx.getDefault("Ellipse"); |
| 230 |
this.rawNode=_1b;
|
| 231 |
},getBoundingBox:function(){ |
| 232 |
if(!this.bbox){ |
| 233 |
var _1c=this.shape; |
| 234 |
this.bbox={x:_1c.cx-_1c.rx,y:_1c.cy-_1c.ry,width:2*_1c.rx,height:2*_1c.ry}; |
| 235 |
} |
| 236 |
return this.bbox; |
| 237 |
}}); |
| 238 |
dojo.declare("dojox.gfx.shape.Circle",dojox.gfx.Shape,{constructor:function(_1d){ |
| 239 |
this.shape=dojox.gfx.getDefault("Circle"); |
| 240 |
this.rawNode=_1d;
|
| 241 |
},getBoundingBox:function(){ |
| 242 |
if(!this.bbox){ |
| 243 |
var _1e=this.shape; |
| 244 |
this.bbox={x:_1e.cx-_1e.r,y:_1e.cy-_1e.r,width:2*_1e.r,height:2*_1e.r}; |
| 245 |
} |
| 246 |
return this.bbox; |
| 247 |
}}); |
| 248 |
dojo.declare("dojox.gfx.shape.Line",dojox.gfx.Shape,{constructor:function(_1f){ |
| 249 |
this.shape=dojox.gfx.getDefault("Line"); |
| 250 |
this.rawNode=_1f;
|
| 251 |
},getBoundingBox:function(){ |
| 252 |
if(!this.bbox){ |
| 253 |
var _20=this.shape; |
| 254 |
this.bbox={x:Math.min(_20.x1,_20.x2),y:Math.min(_20.y1,_20.y2),width:Math.abs(_20.x2-_20.x1),height:Math.abs(_20.y2-_20.y1)}; |
| 255 |
} |
| 256 |
return this.bbox; |
| 257 |
}}); |
| 258 |
dojo.declare("dojox.gfx.shape.Polyline",dojox.gfx.Shape,{constructor:function(_21){ |
| 259 |
this.shape=dojox.gfx.getDefault("Polyline"); |
| 260 |
this.rawNode=_21;
|
| 261 |
},setShape:function(_22,_23){ |
| 262 |
if(_22&&_22 instanceof Array){ |
| 263 |
dojox.gfx.Shape.prototype.setShape.call(this,{points:_22}); |
| 264 |
if(_23&&this.shape.points.length){ |
| 265 |
this.shape.points.push(this.shape.points[0]); |
| 266 |
} |
| 267 |
}else{
|
| 268 |
dojox.gfx.Shape.prototype.setShape.call(this,_22);
|
| 269 |
} |
| 270 |
return this; |
| 271 |
},_normalizePoints:function(){ |
| 272 |
var p=this.shape.points,l=p&&p.length; |
| 273 |
if(l&&typeof p[0]=="number"){ |
| 274 |
var _24=[];
|
| 275 |
for(var i=0;i<l;i+=2){ |
| 276 |
_24.push({x:p[i],y:p[i+1]});
|
| 277 |
} |
| 278 |
this.shape.points=_24;
|
| 279 |
} |
| 280 |
},getBoundingBox:function(){ |
| 281 |
if(!this.bbox&&this.shape.points.length){ |
| 282 |
var p=this.shape.points; |
| 283 |
var l=p.length;
|
| 284 |
var t=p[0]; |
| 285 |
var _25={l:t.x,t:t.y,r:t.x,b:t.y}; |
| 286 |
for(var i=1;i<l;++i){ |
| 287 |
t=p[i]; |
| 288 |
if(_25.l>t.x){
|
| 289 |
_25.l=t.x; |
| 290 |
} |
| 291 |
if(_25.r<t.x){
|
| 292 |
_25.r=t.x; |
| 293 |
} |
| 294 |
if(_25.t>t.y){
|
| 295 |
_25.t=t.y; |
| 296 |
} |
| 297 |
if(_25.b<t.y){
|
| 298 |
_25.b=t.y; |
| 299 |
} |
| 300 |
} |
| 301 |
this.bbox={x:_25.l,y:_25.t,width:_25.r-_25.l,height:_25.b-_25.t}; |
| 302 |
} |
| 303 |
return this.bbox; |
| 304 |
}}); |
| 305 |
dojo.declare("dojox.gfx.shape.Image",dojox.gfx.Shape,{constructor:function(_26){ |
| 306 |
this.shape=dojox.gfx.getDefault("Image"); |
| 307 |
this.rawNode=_26;
|
| 308 |
},getBoundingBox:function(){ |
| 309 |
return this.shape; |
| 310 |
},setStroke:function(){ |
| 311 |
return this; |
| 312 |
},setFill:function(){ |
| 313 |
return this; |
| 314 |
}}); |
| 315 |
dojo.declare("dojox.gfx.shape.Text",dojox.gfx.Shape,{constructor:function(_27){ |
| 316 |
this.fontStyle=null; |
| 317 |
this.shape=dojox.gfx.getDefault("Text"); |
| 318 |
this.rawNode=_27;
|
| 319 |
},getFont:function(){ |
| 320 |
return this.fontStyle; |
| 321 |
},setFont:function(_28){ |
| 322 |
this.fontStyle=typeof _28=="string"?dojox.gfx.splitFontString(_28):dojox.gfx.makeParameters(dojox.gfx.defaultFont,_28); |
| 323 |
this._setFont();
|
| 324 |
return this; |
| 325 |
}}); |
| 326 |
dojox.gfx.shape.Creator={createShape:function(_29){
|
| 327 |
var gfx=dojox.gfx;
|
| 328 |
switch(_29.type){
|
| 329 |
case gfx.defaultPath.type:
|
| 330 |
return this.createPath(_29); |
| 331 |
case gfx.defaultRect.type:
|
| 332 |
return this.createRect(_29); |
| 333 |
case gfx.defaultCircle.type:
|
| 334 |
return this.createCircle(_29); |
| 335 |
case gfx.defaultEllipse.type:
|
| 336 |
return this.createEllipse(_29); |
| 337 |
case gfx.defaultLine.type:
|
| 338 |
return this.createLine(_29); |
| 339 |
case gfx.defaultPolyline.type:
|
| 340 |
return this.createPolyline(_29); |
| 341 |
case gfx.defaultImage.type:
|
| 342 |
return this.createImage(_29); |
| 343 |
case gfx.defaultText.type:
|
| 344 |
return this.createText(_29); |
| 345 |
case gfx.defaultTextPath.type:
|
| 346 |
return this.createTextPath(_29); |
| 347 |
} |
| 348 |
return null; |
| 349 |
},createGroup:function(){ |
| 350 |
return this.createObject(dojox.gfx.Group); |
| 351 |
},createRect:function(_2a){ |
| 352 |
return this.createObject(dojox.gfx.Rect,_2a); |
| 353 |
},createEllipse:function(_2b){ |
| 354 |
return this.createObject(dojox.gfx.Ellipse,_2b); |
| 355 |
},createCircle:function(_2c){ |
| 356 |
return this.createObject(dojox.gfx.Circle,_2c); |
| 357 |
},createLine:function(_2d){ |
| 358 |
return this.createObject(dojox.gfx.Line,_2d); |
| 359 |
},createPolyline:function(_2e){ |
| 360 |
return this.createObject(dojox.gfx.Polyline,_2e); |
| 361 |
},createImage:function(_2f){ |
| 362 |
return this.createObject(dojox.gfx.Image,_2f); |
| 363 |
},createText:function(_30){ |
| 364 |
return this.createObject(dojox.gfx.Text,_30); |
| 365 |
},createPath:function(_31){ |
| 366 |
return this.createObject(dojox.gfx.Path,_31); |
| 367 |
},createTextPath:function(_32){ |
| 368 |
return this.createObject(dojox.gfx.TextPath,{}).setText(_32); |
| 369 |
},createObject:function(_33,_34){ |
| 370 |
return null; |
| 371 |
}}; |
| 372 |
} |