blob: 4c708370cbe678d1ff3964d58230de4b52187c08 [file] [log] [blame]
/*
Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if(!dojo._hasResource["dojox.gfx.shape"]){
dojo._hasResource["dojox.gfx.shape"]=true;
dojo.provide("dojox.gfx.shape");
dojo.require("dojox.gfx._base");
dojo.declare("dojox.gfx.Shape",null,{constructor:function(){
this.rawNode=null;
this.shape=null;
this.matrix=null;
this.fillStyle=null;
this.strokeStyle=null;
this.bbox=null;
this.parent=null;
this.parentMatrix=null;
},getNode:function(){
return this.rawNode;
},getShape:function(){
return this.shape;
},getTransform:function(){
return this.matrix;
},getFill:function(){
return this.fillStyle;
},getStroke:function(){
return this.strokeStyle;
},getParent:function(){
return this.parent;
},getBoundingBox:function(){
return this.bbox;
},getTransformedBoundingBox:function(){
var b=this.getBoundingBox();
if(!b){
return null;
}
var m=this._getRealMatrix();
var r=[];
var g=dojox.gfx.matrix;
r.push(g.multiplyPoint(m,b.x,b.y));
r.push(g.multiplyPoint(m,b.x+b.width,b.y));
r.push(g.multiplyPoint(m,b.x+b.width,b.y+b.height));
r.push(g.multiplyPoint(m,b.x,b.y+b.height));
return r;
},getEventSource:function(){
return this.rawNode;
},setShape:function(_1){
this.shape=dojox.gfx.makeParameters(this.shape,_1);
this.bbox=null;
return this;
},setFill:function(_2){
if(!_2){
this.fillStyle=null;
return this;
}
var f=null;
if(typeof (_2)=="object"&&"type" in _2){
switch(_2.type){
case "linear":
f=dojox.gfx.makeParameters(dojox.gfx.defaultLinearGradient,_2);
break;
case "radial":
f=dojox.gfx.makeParameters(dojox.gfx.defaultRadialGradient,_2);
break;
case "pattern":
f=dojox.gfx.makeParameters(dojox.gfx.defaultPattern,_2);
break;
}
}else{
f=dojox.gfx.normalizeColor(_2);
}
this.fillStyle=f;
return this;
},setStroke:function(_3){
if(!_3){
this.strokeStyle=null;
return this;
}
if(typeof _3=="string"||dojo.isArray(_3)||_3 instanceof dojo.Color){
_3={color:_3};
}
var s=this.strokeStyle=dojox.gfx.makeParameters(dojox.gfx.defaultStroke,_3);
s.color=dojox.gfx.normalizeColor(s.color);
return this;
},setTransform:function(_4){
this.matrix=dojox.gfx.matrix.clone(_4?dojox.gfx.matrix.normalize(_4):dojox.gfx.matrix.identity);
return this._applyTransform();
},_applyTransform:function(){
return this;
},moveToFront:function(){
var p=this.getParent();
if(p){
p._moveChildToFront(this);
this._moveToFront();
}
return this;
},moveToBack:function(){
var p=this.getParent();
if(p){
p._moveChildToBack(this);
this._moveToBack();
}
return this;
},_moveToFront:function(){
},_moveToBack:function(){
},applyRightTransform:function(_5){
return _5?this.setTransform([this.matrix,_5]):this;
},applyLeftTransform:function(_6){
return _6?this.setTransform([_6,this.matrix]):this;
},applyTransform:function(_7){
return _7?this.setTransform([this.matrix,_7]):this;
},removeShape:function(_8){
if(this.parent){
this.parent.remove(this,_8);
}
return this;
},_setParent:function(_9,_a){
this.parent=_9;
return this._updateParentMatrix(_a);
},_updateParentMatrix:function(_b){
this.parentMatrix=_b?dojox.gfx.matrix.clone(_b):null;
return this._applyTransform();
},_getRealMatrix:function(){
var m=this.matrix;
var p=this.parent;
while(p){
if(p.matrix){
m=dojox.gfx.matrix.multiply(p.matrix,m);
}
p=p.parent;
}
return m;
}});
dojox.gfx.shape._eventsProcessing={connect:function(_c,_d,_e){
return arguments.length>2?dojo.connect(this.getEventSource(),_c,_d,_e):dojo.connect(this.getEventSource(),_c,_d);
},disconnect:function(_f){
dojo.disconnect(_f);
}};
dojo.extend(dojox.gfx.Shape,dojox.gfx.shape._eventsProcessing);
dojox.gfx.shape.Container={_init:function(){
this.children=[];
},add:function(_10){
var _11=_10.getParent();
if(_11){
_11.remove(_10,true);
}
this.children.push(_10);
return _10._setParent(this,this._getRealMatrix());
},remove:function(_12,_13){
for(var i=0;i<this.children.length;++i){
if(this.children[i]==_12){
if(_13){
}else{
_12.parent=null;
_12.parentMatrix=null;
}
this.children.splice(i,1);
break;
}
}
return this;
},clear:function(){
this.children=[];
return this;
},_moveChildToFront:function(_14){
for(var i=0;i<this.children.length;++i){
if(this.children[i]==_14){
this.children.splice(i,1);
this.children.push(_14);
break;
}
}
return this;
},_moveChildToBack:function(_15){
for(var i=0;i<this.children.length;++i){
if(this.children[i]==_15){
this.children.splice(i,1);
this.children.unshift(_15);
break;
}
}
return this;
}};
dojo.declare("dojox.gfx.shape.Surface",null,{constructor:function(){
this.rawNode=null;
this._parent=null;
this._nodes=[];
this._events=[];
},destroy:function(){
dojo.forEach(this._nodes,dojo.destroy);
this._nodes=[];
dojo.forEach(this._events,dojo.disconnect);
this._events=[];
this.rawNode=null;
if(dojo.isIE){
while(this._parent.lastChild){
dojo.destroy(this._parent.lastChild);
}
}else{
this._parent.innerHTML="";
}
this._parent=null;
},getEventSource:function(){
return this.rawNode;
},_getRealMatrix:function(){
return null;
},isLoaded:true,onLoad:function(_16){
},whenLoaded:function(_17,_18){
var f=dojo.hitch(_17,_18);
if(this.isLoaded){
f(this);
}else{
var h=dojo.connect(this,"onLoad",function(_19){
dojo.disconnect(h);
f(_19);
});
}
}});
dojo.extend(dojox.gfx.shape.Surface,dojox.gfx.shape._eventsProcessing);
dojo.declare("dojox.gfx.Point",null,{});
dojo.declare("dojox.gfx.Rectangle",null,{});
dojo.declare("dojox.gfx.shape.Rect",dojox.gfx.Shape,{constructor:function(_1a){
this.shape=dojox.gfx.getDefault("Rect");
this.rawNode=_1a;
},getBoundingBox:function(){
return this.shape;
}});
dojo.declare("dojox.gfx.shape.Ellipse",dojox.gfx.Shape,{constructor:function(_1b){
this.shape=dojox.gfx.getDefault("Ellipse");
this.rawNode=_1b;
},getBoundingBox:function(){
if(!this.bbox){
var _1c=this.shape;
this.bbox={x:_1c.cx-_1c.rx,y:_1c.cy-_1c.ry,width:2*_1c.rx,height:2*_1c.ry};
}
return this.bbox;
}});
dojo.declare("dojox.gfx.shape.Circle",dojox.gfx.Shape,{constructor:function(_1d){
this.shape=dojox.gfx.getDefault("Circle");
this.rawNode=_1d;
},getBoundingBox:function(){
if(!this.bbox){
var _1e=this.shape;
this.bbox={x:_1e.cx-_1e.r,y:_1e.cy-_1e.r,width:2*_1e.r,height:2*_1e.r};
}
return this.bbox;
}});
dojo.declare("dojox.gfx.shape.Line",dojox.gfx.Shape,{constructor:function(_1f){
this.shape=dojox.gfx.getDefault("Line");
this.rawNode=_1f;
},getBoundingBox:function(){
if(!this.bbox){
var _20=this.shape;
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)};
}
return this.bbox;
}});
dojo.declare("dojox.gfx.shape.Polyline",dojox.gfx.Shape,{constructor:function(_21){
this.shape=dojox.gfx.getDefault("Polyline");
this.rawNode=_21;
},setShape:function(_22,_23){
if(_22&&_22 instanceof Array){
dojox.gfx.Shape.prototype.setShape.call(this,{points:_22});
if(_23&&this.shape.points.length){
this.shape.points.push(this.shape.points[0]);
}
}else{
dojox.gfx.Shape.prototype.setShape.call(this,_22);
}
return this;
},_normalizePoints:function(){
var p=this.shape.points,l=p&&p.length;
if(l&&typeof p[0]=="number"){
var _24=[];
for(var i=0;i<l;i+=2){
_24.push({x:p[i],y:p[i+1]});
}
this.shape.points=_24;
}
},getBoundingBox:function(){
if(!this.bbox&&this.shape.points.length){
var p=this.shape.points;
var l=p.length;
var t=p[0];
var _25={l:t.x,t:t.y,r:t.x,b:t.y};
for(var i=1;i<l;++i){
t=p[i];
if(_25.l>t.x){
_25.l=t.x;
}
if(_25.r<t.x){
_25.r=t.x;
}
if(_25.t>t.y){
_25.t=t.y;
}
if(_25.b<t.y){
_25.b=t.y;
}
}
this.bbox={x:_25.l,y:_25.t,width:_25.r-_25.l,height:_25.b-_25.t};
}
return this.bbox;
}});
dojo.declare("dojox.gfx.shape.Image",dojox.gfx.Shape,{constructor:function(_26){
this.shape=dojox.gfx.getDefault("Image");
this.rawNode=_26;
},getBoundingBox:function(){
return this.shape;
},setStroke:function(){
return this;
},setFill:function(){
return this;
}});
dojo.declare("dojox.gfx.shape.Text",dojox.gfx.Shape,{constructor:function(_27){
this.fontStyle=null;
this.shape=dojox.gfx.getDefault("Text");
this.rawNode=_27;
},getFont:function(){
return this.fontStyle;
},setFont:function(_28){
this.fontStyle=typeof _28=="string"?dojox.gfx.splitFontString(_28):dojox.gfx.makeParameters(dojox.gfx.defaultFont,_28);
this._setFont();
return this;
}});
dojox.gfx.shape.Creator={createShape:function(_29){
var gfx=dojox.gfx;
switch(_29.type){
case gfx.defaultPath.type:
return this.createPath(_29);
case gfx.defaultRect.type:
return this.createRect(_29);
case gfx.defaultCircle.type:
return this.createCircle(_29);
case gfx.defaultEllipse.type:
return this.createEllipse(_29);
case gfx.defaultLine.type:
return this.createLine(_29);
case gfx.defaultPolyline.type:
return this.createPolyline(_29);
case gfx.defaultImage.type:
return this.createImage(_29);
case gfx.defaultText.type:
return this.createText(_29);
case gfx.defaultTextPath.type:
return this.createTextPath(_29);
}
return null;
},createGroup:function(){
return this.createObject(dojox.gfx.Group);
},createRect:function(_2a){
return this.createObject(dojox.gfx.Rect,_2a);
},createEllipse:function(_2b){
return this.createObject(dojox.gfx.Ellipse,_2b);
},createCircle:function(_2c){
return this.createObject(dojox.gfx.Circle,_2c);
},createLine:function(_2d){
return this.createObject(dojox.gfx.Line,_2d);
},createPolyline:function(_2e){
return this.createObject(dojox.gfx.Polyline,_2e);
},createImage:function(_2f){
return this.createObject(dojox.gfx.Image,_2f);
},createText:function(_30){
return this.createObject(dojox.gfx.Text,_30);
},createPath:function(_31){
return this.createObject(dojox.gfx.Path,_31);
},createTextPath:function(_32){
return this.createObject(dojox.gfx.TextPath,{}).setText(_32);
},createObject:function(_33,_34){
return null;
}};
}