diff --git a/src/core/core.scale.js b/src/core/core.scale.js index 53e90c64215..14b4af404da 100644 --- a/src/core/core.scale.js +++ b/src/core/core.scale.js @@ -355,7 +355,7 @@ var Scale = Element.extend({ me._start = start; me._end = end; me._reverse = reverse; - me._length = me._end - me._start; + me._length = end - start; }, afterUpdate: function() { diff --git a/src/scales/scale.linear.js b/src/scales/scale.linear.js index 398fce8fc7a..44bf811cb66 100644 --- a/src/scales/scale.linear.js +++ b/src/scales/scale.linear.js @@ -158,20 +158,12 @@ module.exports = LinearScaleBase.extend({ // Utils getPixelForValue: function(value) { - // This must be called after fit has been run so that - // this.left, this.top, this.right, and this.bottom have been defined var me = this; - var start = me.min; - var rightValue = +me.getRightValue(value); - var range = me.max - start; - return me.getPixelForDecimal((rightValue - start) / range); + return me.getPixelForDecimal((+me.getRightValue(value) - me.min) / me._range); }, getValueForPixel: function(pixel) { - var me = this; - var start = me.min; - var range = me.max - start; - return start + me.getDecimalForPixel(pixel) * range; + return this.min + this.getDecimalForPixel(pixel) * this._range; }, getPixelForTick: function(index) { diff --git a/src/scales/scale.linearbase.js b/src/scales/scale.linearbase.js index 7f68279db6c..d9d0901f6e3 100644 --- a/src/scales/scale.linearbase.js +++ b/src/scales/scale.linearbase.js @@ -231,5 +231,13 @@ module.exports = Scale.extend({ me.zeroLineIndex = me.ticks.indexOf(0); Scale.prototype.convertTicksToLabels.call(me); + }, + + _configure: function() { + var me = this; + + Scale.prototype._configure.call(me); + + me._range = me.max - me.min; } }); diff --git a/src/scales/scale.logarithmic.js b/src/scales/scale.logarithmic.js index 9ec6e4316c4..4fc13eb316b 100644 --- a/src/scales/scale.logarithmic.js +++ b/src/scales/scale.logarithmic.js @@ -268,15 +268,18 @@ module.exports = Scale.extend({ return significand * Math.pow(10, exp); }, - _getParams: function() { + _configure: function() { var me = this; var start = me.min; var offset = 0; + + Scale.prototype._configure.call(me); + if (start === 0) { start = me._getFirstTickValue(me.minNotZero); offset = valueOrDefault(me.options.ticks.fontSize, defaults.global.defaultFontSize) / me._length; } - return { + me._params = { start: log10(start), offset: offset, range: (log10(me.max) - log10(start)) / (1 - offset) @@ -286,12 +289,11 @@ module.exports = Scale.extend({ getPixelForValue: function(value) { var me = this; var decimal = 0; - var params; + var params = me._params; value = +me.getRightValue(value); if (value > me.min && value > 0) { - params = me._getParams(); decimal = (log10(value) - params.start) / params.range + params.offset; } return me.getPixelForDecimal(decimal); @@ -299,7 +301,7 @@ module.exports = Scale.extend({ getValueForPixel: function(pixel) { var me = this; - var params = me._getParams(); + var params = me._params; var decimal = me.getDecimalForPixel(pixel); return decimal === 0 && me.min === 0 ? 0 diff --git a/src/scales/scale.time.js b/src/scales/scale.time.js index e0e12f52bf2..6027e757a8e 100644 --- a/src/scales/scale.time.js +++ b/src/scales/scale.time.js @@ -401,7 +401,7 @@ function computeOffsets(table, ticks, min, max, options) { } } - return {start: start, end: end}; + return {start: start, end: end, range: start + 1 + end}; } function setMajorTicks(scale, ticks, map, majorUnit) { @@ -595,7 +595,6 @@ module.exports = Scale.extend({ me.max = Math.max(min + 1, max); // PRIVATE - me._horizontal = me.isHorizontal(); me._table = []; me._timestamps = { data: timestamps, @@ -610,16 +609,16 @@ module.exports = Scale.extend({ var max = me.max; var options = me.options; var timeOpts = options.time; - var timestamps = []; + var timestamps = me._timestamps; var ticks = []; var i, ilen, timestamp; switch (options.ticks.source) { case 'data': - timestamps = me._timestamps.data; + timestamps = timestamps.data; break; case 'labels': - timestamps = me._timestamps.labels; + timestamps = timestamps.labels; break; case 'auto': default: @@ -723,13 +722,9 @@ module.exports = Scale.extend({ */ getPixelForOffset: function(time) { var me = this; - var isReverse = me.options.ticks.reverse; - var size = me._horizontal ? me.width : me.height; - var start = me._horizontal ? isReverse ? me.right : me.left : isReverse ? me.bottom : me.top; + var offsets = me._offsets; var pos = interpolate(me._table, 'time', time, 'pos'); - var offset = size * (me._offsets.start + pos) / (me._offsets.start + 1 + me._offsets.end); - - return isReverse ? start - offset : start + offset; + return me.getPixelForDecimal((offsets.start + pos) / offsets.range); }, getPixelForValue: function(value, index, datasetIndex) { @@ -758,9 +753,8 @@ module.exports = Scale.extend({ getValueForPixel: function(pixel) { var me = this; - var size = me._horizontal ? me.width : me.height; - var start = me._horizontal ? me.left : me.top; - var pos = (size ? (pixel - start) / size : 0) * (me._offsets.start + 1 + me._offsets.start) - me._offsets.end; + var offsets = me._offsets; + var pos = me.getDecimalForPixel(pixel) * offsets.range - offsets.end; var time = interpolate(me._table, 'pos', pos, 'time'); // DEPRECATION, we should return time directly