59 lines
2.0 KiB
JavaScript
59 lines
2.0 KiB
JavaScript
define("dojox/dgauges/CircularGauge", ["dojo/_base/declare", "dojo/dom-geometry", "dojox/gfx", "./GaugeBase"], function(declare, domGeom, gfx, GaugeBase){
|
|
return declare("dojox.dgauges.CircularGauge", GaugeBase, {
|
|
// summary:
|
|
// The base class for circular gauges.
|
|
// You can create custom circular or semi-circular gauges by extending this class.
|
|
// See dojox.dgauges.components.default.CircularLinearGauge.js for an example of circular gauge.
|
|
|
|
_transformProperties: null,
|
|
|
|
refreshRendering: function(){
|
|
if(this._widgetBox.w <= 0 || this._widgetBox.h <= 0){
|
|
return;
|
|
}
|
|
|
|
for(var key in this._elementsIndex){
|
|
this._elementsRenderers[key] = this._elementsIndex[key].refreshRendering();
|
|
}
|
|
|
|
// Maximize the drawing area and center the gauge
|
|
var bb = this._computeBoundingBox(this._gfxGroup);
|
|
|
|
var naturalRatio = (bb.x + bb.width) / (bb.y + bb.height);
|
|
var widgetWidth = this._widgetBox.w;
|
|
var widgetHeight = this._widgetBox.h;
|
|
var widgetRatio = this._widgetBox.w / this._widgetBox.h;
|
|
|
|
var xpos = 0;
|
|
var ypos = 0;
|
|
var h = 0;
|
|
var w = 0;
|
|
if(naturalRatio > widgetRatio){
|
|
w = widgetWidth;
|
|
h = w / naturalRatio;
|
|
ypos = (widgetHeight - h) / 2;
|
|
}else{
|
|
h = widgetHeight;
|
|
w = h * naturalRatio;
|
|
xpos = (widgetWidth - w) / 2;
|
|
}
|
|
var scaleFactor = Math.max(w / (bb.x + bb.width), h / (bb.y + bb.height));
|
|
this._transformProperties = {scale:scaleFactor, tx:xpos, ty:ypos};
|
|
this._gfxGroup.setTransform([gfx.matrix.scale(scaleFactor), gfx.matrix.translate(xpos / scaleFactor, ypos / scaleFactor)]);
|
|
},
|
|
|
|
_gaugeToPage: function(px, py){
|
|
// summary:
|
|
// Internal method.
|
|
// tags:
|
|
// private
|
|
if(this._transformProperties){
|
|
var np = domGeom.position(this.domNode, true);
|
|
return {x: np.x + px * this._transformProperties.scale + this._transformProperties.tx, y: np.y + py * this._transformProperties.scale + this._transformProperties.ty};
|
|
}else{
|
|
return null;
|
|
}
|
|
}
|
|
});
|
|
});
|