dojox
Version:
Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.
134 lines (125 loc) • 3.9 kB
JavaScript
define(["dojo/_base/lang", "dojo/_base/Color"], function(lang, Color){
// module:
// dojox/dgauges/components/utils
// summary:
// Gauge utilities.
// tags:
// public
var utils = {};
lang.mixin(utils, {
brightness: function(col, b){
// summary:
// Adjusts the brightness of a color.
// col: Number
// The base color
// b: Number
// A positive or negative value to adjust the brightness
// returns: Number
// The modified color
var res = lang.mixin(null, col);
res.r = Math.max(Math.min(res.r + b, 255), 0);
res.g = Math.max(Math.min(res.g + b, 255), 0);
res.b = Math.max(Math.min(res.b + b, 255), 0);
return res;
},
createGradient: function(entries){
// summary:
// Creates a gradient object
// entries: Array
// An array of numbers representing colors
// returns: Number
// The modified color
var res = {
colors: []
};
var obj;
for(var i = 0; i < entries.length; i++){
if(i % 2 == 0){
obj = {
offset: entries[i]
};
} else {
obj.color = entries[i];
res.colors.push(obj);
}
}
return res;
},
_setter: function(obj, attributes, values){
for(var i = 0; i < attributes.length; i++){
obj[attributes[i]] = values[i];
}
},
genericCircularGauge: function(scale, indicator, originX, originY, radius, startAngle, endAngle, orientation, font, labelPosition, tickShapeFunc){
// summary:
// A helper method for configuring a circular gauge.
// scale: CircularScale
// A circular scale
// indicator: IndicatorBase
// A circular indicator
// originX: Number
// The x-coordinate of the center of the scale (in pixels)
// originY: Number
// The y-coordinate of the center of the scale (in pixels)
// radius: Number
// The radius of the scale (in pixels)
// startAngle: Number
// The start angle of the scale (in degrees)
// endAngle: Number
// The end angle of the scale (in degrees)
// orientation: String?
// The orientation of the scale, can be "clockwise" or "cclockwise"
// font: Object?
// The font used for the gauge
// labelPosition: String?
// The position of the labels regarding
// tickShapeFunc: Object?
// A drawing function for the ticks
// returns: Number
// The modified color
var attributes = ["originX", "originY", "radius", "startAngle", "endAngle", "orientation", "font", "labelPosition", "tickShapeFunc"];
if(!orientation){
orientation = "clockwise";
}
if(!font){
font = {
family: "Helvetica",
style: "normal",
size: "10pt",
color: "#555555"
};
}
if(!labelPosition){
labelPosition = "inside";
}
if(!tickShapeFunc){
tickShapeFunc = function(group, scale, tick){
var stroke = scale.tickStroke;
var majorStroke;
var minorStroke;
if(stroke){
majorStroke = {color:stroke.color ? stroke.color : "#000000", width:stroke.width ? stroke.width : 0.5};
var col = new Color(stroke.color).toRgb();
minorStroke = {color:stroke.color ? utils.brightness({r:col[0], g:col[1], b:col[2]},51) : "#000000", width:stroke.width ? stroke.width * 0.6 : 0.3};
}
return group.createLine({
x1: tick.isMinor ? 2 : 0,
y1: 0,
x2: tick.isMinor ? 8 : 10,
y2: 0
}).setStroke(tick.isMinor ? minorStroke : majorStroke);
};
}
this._setter(scale, attributes, [originX, originY, radius, startAngle, endAngle, orientation, font, labelPosition, tickShapeFunc]);
indicator.set("interactionArea", "gauge");
// Needle shape
indicator.set("indicatorShapeFunc", function(group, indicator){
return group.createPolyline([0, -5, indicator.scale.radius - 6, 0, 0, 5, 0, -5]).setStroke({
color: "#333333",
width: 0.25
}).setFill(scale._gauge.indicatorColor);
});
}
});
return utils;
});