UNPKG

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.

93 lines (79 loc) 2.68 kB
define(["dojo/_base/declare", "./ScaleIndicatorBase", "dojox/gfx", "dojo/_base/event", "dojo/dom-geometry"], function(declare, ScaleIndicatorBase, gfx, eventUtil, domGeom){ return declare("dojox.dgauges.RectangularValueIndicator", ScaleIndicatorBase, { // summary: // The rectangular value indicator, typically used for creating markers or thumbs. // paddingLeft: Number // The left padding. paddingLeft: 0, // paddingTop: Number // The top padding. paddingTop: 0, // paddingRight: Number // The right padding. paddingRight: 0, // paddingBottom: Number // The bottom padding. paddingBottom: 0, constructor: function(){ this.addInvalidatingProperties(["paddingTop", "paddingLeft", "paddingRight", "paddingBottom"]); }, indicatorShapeFunc: function(group, indicator){ // summary: // Draws the indicator. // group: dojox/gfx/Group // A GFX group for drawing. The indicator is always centered horizontally and is // automatically rotated if the scale is vertical. // indicator: dojox/dgauges/IndicatorBase // A reference to this indicator. // returns: dojox/gfx/shape.Shape // A GFX shape retrievable using the getIndicatorRenderer method of the associated scale. return group.createPolyline([0, 0, 10, 0, 0, 10, -10, 0, 0, 0]).setStroke({ color: "black", width: 1 }); }, refreshRendering: function(){ this.inherited(arguments); // get position corresponding to the value var v = isNaN(this._transitionValue) ? this.value : this._transitionValue; var pos = this.scale.positionForValue(v); // computes offsets to move the indicator var dx = 0, dy = 0; var angle = 0; if(this.scale._gauge.orientation == "horizontal"){ dx = pos; dy = this.paddingTop; }else{ dx = this.paddingLeft; dy = pos; angle = 90; } // translate the indicator this._gfxGroup.setTransform([{ dx: dx, dy: dy }, gfx.matrix.rotateg(angle)]); }, _onMouseDown: function(event){ // summary: // Internal method. // tags: // private this.inherited(arguments); var np = domGeom.position(this.scale._gauge.domNode, true); this.set("value", this.scale.valueForPosition({x: event.pageX - np.x, y: event.pageY - np.y})); // prevent the browser from selecting text eventUtil.stop(event); }, _onMouseMove: function(event){ // summary: // Internal method. // tags: // private this.inherited(arguments); var np = domGeom.position(this.scale._gauge.domNode, true); this.set("value", this.scale.valueForPosition({x: event.pageX - np.x, y: event.pageY - np.y})); } }) });