Dygraph.Plugins.RangeSelector = (function() {
-/*jshint globalstrict: true */
/*global Dygraph:false */
"use strict";
};
rangeSelector.prototype.setDefaultOption_ = function(name, value) {
- return this.dygraph_.attrs_[name] = value;
+ this.dygraph_.attrs_[name] = value;
};
/**
* Resizes the range selector.
*/
rangeSelector.prototype.resize_ = function() {
- function setElementRect(canvas, rect) {
+ function setElementRect(canvas, context, rect) {
+ var canvasScale = Dygraph.getContextPixelRatio(context);
+
canvas.style.top = rect.y + 'px';
canvas.style.left = rect.x + 'px';
- canvas.width = rect.w;
- canvas.height = rect.h;
- canvas.style.width = canvas.width + 'px'; // for IE
- canvas.style.height = canvas.height + 'px'; // for IE
+ canvas.width = rect.w * canvasScale;
+ canvas.height = rect.h * canvasScale;
+ canvas.style.width = rect.w + 'px';
+ canvas.style.height = rect.h + 'px';
+
+ if(canvasScale != 1) {
+ context.scale(canvasScale, canvasScale);
+ }
}
var plotArea = this.dygraph_.layout_.getPlotArea();
h: this.getOption_('rangeSelectorHeight')
};
- setElementRect(this.bgcanvas_, this.canvasRect_);
- setElementRect(this.fgcanvas_, this.canvasRect_);
+ setElementRect(this.bgcanvas_, this.bgcanvas_ctx_, this.canvasRect_);
+ setElementRect(this.fgcanvas_, this.fgcanvas_ctx_, this.canvasRect_);
};
/**
var dataPoint = combinedSeriesData.data[i];
var x = ((dataPoint[0] !== null) ? ((dataPoint[0] - xExtremes[0])*xFact) : NaN);
var y = ((dataPoint[1] !== null) ? (canvasHeight - (dataPoint[1] - combinedSeriesData.yMin)*yFact) : NaN);
+
+ // Skip points that don't change the x-value. Overly fine-grained points
+ // can cause major slowdowns with the ctx.fill() call below.
+ if (!stepPlot && prevX !== null && Math.round(x) == Math.round(prevX)) {
+ continue;
+ }
+
if (isFinite(x) && isFinite(y)) {
if(prevX === null) {
ctx.lineTo(x, canvasHeight);