blob: 1639ede02fb52692c95b163bdaf7b7dff50718dc [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(_5){
this.shape=dojox.gfx.makeParameters(this.shape,_5);
this.bbox=null;
return this;
},setFill:function(_6){
if(!_6){
this.fillStyle=null;
return this;
}
var f=null;
if(typeof (_6)=="object"&&"type" in _6){
switch(_6.type){
case "linear":
f=dojox.gfx.makeParameters(dojox.gfx.defaultLinearGradient,_6);
break;
case "radial":
f=dojox.gfx.makeParameters(dojox.gfx.defaultRadialGradient,_6);
break;
case "pattern":
f=dojox.gfx.makeParameters(dojox.gfx.defaultPattern,_6);
break;
}
}else{
f=dojox.gfx.normalizeColor(_6);
}
this.fillStyle=f;
return this;
},setStroke:function(_8){
if(!_8){
this.strokeStyle=null;
return this;
}
if(typeof _8=="string"||dojo.isArray(_8)||_8 instanceof dojo.Color){
_8={color:_8};
}
var s=this.strokeStyle=dojox.gfx.makeParameters(dojox.gfx.defaultStroke,_8);
s.color=dojox.gfx.normalizeColor(s.color);
return this;
},setTransform:function(_a){
this.matrix=dojox.gfx.matrix.clone(_a?dojox.gfx.matrix.normalize(_a):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(_d){
return _d?this.setTransform([this.matrix,_d]):this;
},applyLeftTransform:function(_e){
return _e?this.setTransform([_e,this.matrix]):this;
},applyTransform:function(_f){
return _f?this.setTransform([this.matrix,_f]):this;
},removeShape:function(_10){
if(this.parent){
this.parent.remove(this,_10);
}
return this;
},_setParent:function(_11,_12){
this.parent=_11;
return this._updateParentMatrix(_12);
},_updateParentMatrix:function(_13){
this.parentMatrix=_13?dojox.gfx.matrix.clone(_13):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(_16,_17,_18){
return arguments.length>2?dojo.connect(this.getEventSource(),_16,_17,_18):dojo.connect(this.getEventSource(),_16,_17);
},disconnect:function(_19){
dojo.disconnect(_19);
}};
dojo.extend(dojox.gfx.Shape,dojox.gfx.shape._eventsProcessing);
dojox.gfx.shape.Container={_init:function(){
this.children=[];
},add:function(_1a){
var _1b=_1a.getParent();
if(_1b){
_1b.remove(_1a,true);
}
this.children.push(_1a);
return _1a._setParent(this,this._getRealMatrix());
},remove:function(_1c,_1d){
for(var i=0;i<this.children.length;++i){
if(this.children[i]==_1c){
if(_1d){
}else{
_1c.parent=null;
_1c.parentMatrix=null;
}
this.children.splice(i,1);
break;
}
}
return this;
},clear:function(){
this.children=[];
return this;
},_moveChildToFront:function(_1f){
for(var i=0;i<this.children.length;++i){
if(this.children[i]==_1f){
this.children.splice(i,1);
this.children.push(_1f);
break;
}
}
return this;
},_moveChildToBack:function(_21){
for(var i=0;i<this.children.length;++i){
if(this.children[i]==_21){
this.children.splice(i,1);
this.children.unshift(_21);
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(_23){
},whenLoaded:function(_24,_25){
var f=dojo.hitch(_24,_25);
if(this.isLoaded){
f(this);
}else{
var h=dojo.connect(this,"onLoad",function(_28){
dojo.disconnect(h);
f(_28);
});
}
}});
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(_29){
this.shape=dojo.clone(dojox.gfx.defaultRect);
this.rawNode=_29;
},getBoundingBox:function(){
return this.shape;
}});
dojo.declare("dojox.gfx.shape.Ellipse",dojox.gfx.Shape,{constructor:function(_2a){
this.shape=dojo.clone(dojox.gfx.defaultEllipse);
this.rawNode=_2a;
},getBoundingBox:function(){
if(!this.bbox){
var _2b=this.shape;
this.bbox={x:_2b.cx-_2b.rx,y:_2b.cy-_2b.ry,width:2*_2b.rx,height:2*_2b.ry};
}
return this.bbox;
}});
dojo.declare("dojox.gfx.shape.Circle",dojox.gfx.Shape,{constructor:function(_2c){
this.shape=dojo.clone(dojox.gfx.defaultCircle);
this.rawNode=_2c;
},getBoundingBox:function(){
if(!this.bbox){
var _2d=this.shape;
this.bbox={x:_2d.cx-_2d.r,y:_2d.cy-_2d.r,width:2*_2d.r,height:2*_2d.r};
}
return this.bbox;
}});
dojo.declare("dojox.gfx.shape.Line",dojox.gfx.Shape,{constructor:function(_2e){
this.shape=dojo.clone(dojox.gfx.defaultLine);
this.rawNode=_2e;
},getBoundingBox:function(){
if(!this.bbox){
var _2f=this.shape;
this.bbox={x:Math.min(_2f.x1,_2f.x2),y:Math.min(_2f.y1,_2f.y2),width:Math.abs(_2f.x2-_2f.x1),height:Math.abs(_2f.y2-_2f.y1)};
}
return this.bbox;
}});
dojo.declare("dojox.gfx.shape.Polyline",dojox.gfx.Shape,{constructor:function(_30){
this.shape=dojo.clone(dojox.gfx.defaultPolyline);
this.rawNode=_30;
},setShape:function(_31,_32){
if(_31&&_31 instanceof Array){
dojox.gfx.Shape.prototype.setShape.call(this,{points:_31});
if(_32&&this.shape.points.length){
this.shape.points.push(this.shape.points[0]);
}
}else{
dojox.gfx.Shape.prototype.setShape.call(this,_31);
}
return this;
},getBoundingBox:function(){
if(!this.bbox&&this.shape.points.length){
var p=this.shape.points;
var l=p.length;
var t=p[0];
var _36={l:t.x,t:t.y,r:t.x,b:t.y};
for(var i=1;i<l;++i){
t=p[i];
if(_36.l>t.x){
_36.l=t.x;
}
if(_36.r<t.x){
_36.r=t.x;
}
if(_36.t>t.y){
_36.t=t.y;
}
if(_36.b<t.y){
_36.b=t.y;
}
}
this.bbox={x:_36.l,y:_36.t,width:_36.r-_36.l,height:_36.b-_36.t};
}
return this.bbox;
}});
dojo.declare("dojox.gfx.shape.Image",dojox.gfx.Shape,{constructor:function(_38){
this.shape=dojo.clone(dojox.gfx.defaultImage);
this.rawNode=_38;
},getBoundingBox:function(){
return this.shape;
},setStroke:function(){
return this;
},setFill:function(){
return this;
}});
dojo.declare("dojox.gfx.shape.Text",dojox.gfx.Shape,{constructor:function(_39){
this.fontStyle=null;
this.shape=dojo.clone(dojox.gfx.defaultText);
this.rawNode=_39;
},getFont:function(){
return this.fontStyle;
},setFont:function(_3a){
this.fontStyle=typeof _3a=="string"?dojox.gfx.splitFontString(_3a):dojox.gfx.makeParameters(dojox.gfx.defaultFont,_3a);
this._setFont();
return this;
}});
dojox.gfx.shape.Creator={createShape:function(_3b){
switch(_3b.type){
case dojox.gfx.defaultPath.type:
return this.createPath(_3b);
case dojox.gfx.defaultRect.type:
return this.createRect(_3b);
case dojox.gfx.defaultCircle.type:
return this.createCircle(_3b);
case dojox.gfx.defaultEllipse.type:
return this.createEllipse(_3b);
case dojox.gfx.defaultLine.type:
return this.createLine(_3b);
case dojox.gfx.defaultPolyline.type:
return this.createPolyline(_3b);
case dojox.gfx.defaultImage.type:
return this.createImage(_3b);
case dojox.gfx.defaultText.type:
return this.createText(_3b);
case dojox.gfx.defaultTextPath.type:
return this.createTextPath(_3b);
}
return null;
},createGroup:function(){
return this.createObject(dojox.gfx.Group);
},createRect:function(_3c){
return this.createObject(dojox.gfx.Rect,_3c);
},createEllipse:function(_3d){
return this.createObject(dojox.gfx.Ellipse,_3d);
},createCircle:function(_3e){
return this.createObject(dojox.gfx.Circle,_3e);
},createLine:function(_3f){
return this.createObject(dojox.gfx.Line,_3f);
},createPolyline:function(_40){
return this.createObject(dojox.gfx.Polyline,_40);
},createImage:function(_41){
return this.createObject(dojox.gfx.Image,_41);
},createText:function(_42){
return this.createObject(dojox.gfx.Text,_42);
},createPath:function(_43){
return this.createObject(dojox.gfx.Path,_43);
},createTextPath:function(_44){
return this.createObject(dojox.gfx.TextPath,{}).setText(_44);
},createObject:function(_45,_46){
return null;
}};
}