Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / gfx / shape.js @ 9

History | View | Annotate | Download (9.45 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.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
}