From: Dan Vanderkam Date: Sat, 20 Feb 2010 02:56:30 +0000 (-0800) Subject: add new coordinate conversion functions X-Git-Tag: v1.0.0~717 X-Git-Url: https://adrianiainlam.tk/git/?a=commitdiff_plain;h=3230c66289eda13a89722f2abb259b7deab5b103;p=dygraphs.git add new coordinate conversion functions --- diff --git a/dygraph.js b/dygraph.js index 248fbd5..6bf8e7c 100644 --- a/dygraph.js +++ b/dygraph.js @@ -280,6 +280,55 @@ Dygraph.prototype.xAxisRange = function() { return [left, right]; }; +/** + * Returns the currently-visible y-range. This can be affected by zooming, + * panning or a call to updateOptions. + * Returns a two-element array: [bottom, top]. + */ +Dygraph.prototype.yAxisRange = function() { + return this.displayedYRange_; +}; + +/** + * Convert from data coordinates to canvas/div X/Y coordinates. + * Returns a two-element array: [X, Y] + */ +Dygraph.prototype.toDomCoords = function(x, y) { + var ret = [null, null]; + var area = this.plotter_.area; + if (x !== null) { + var xRange = this.xAxisRange(); + ret[0] = area.x + (x - xRange[0]) / (xRange[1] - xRange[0]) * area.w; + } + + if (y !== null) { + var yRange = this.yAxisRange(); + ret[1] = area.y + (yRange[0] - y) / (yRange[1] - yRange[0]) * area.h; + } + + return ret; +}; + +/** + * Convert from canvas/div coords to data coordinates. + * Returns a two-element array: [X, Y] + */ +Dygraph.prototype.toDataCoords = function(x, y) { + var ret = [null, null]; + var area = this.plotter_.area; + if (x !== null) { + var xRange = this.xAxisRange(); + ret[0] = xRange[0] + (x - area.x) / area.w * (xRange[1] - xRange[0]); + } + + if (y !== null) { + var yRange = this.yAxisRange(); + ret[1] = yRange[0] + (area.h - y) / area.h * (yRange[1] - yRange[0]); + } + + return ret; +}; + Dygraph.addEvent = function(el, evt, fn) { var normed_fn = function(e) { if (!e) var e = window.event; @@ -1446,6 +1495,7 @@ Dygraph.prototype.drawGraph_ = function(data) { // set explicitly by the user. if (this.valueRange_ != null) { this.addYTicks_(this.valueRange_[0], this.valueRange_[1]); + this.displayedYRange_ = this.valueRange_; } else { // This affects the calculation of span, below. if (this.attr_("includeZero") && minY > 0) { @@ -1469,6 +1519,7 @@ Dygraph.prototype.drawGraph_ = function(data) { } this.addYTicks_(minAxisY, maxAxisY); + this.displayedYRange_ = [minAxisY, maxAxisY]; } this.addXTicks_(); diff --git a/tests/callback.html b/tests/callback.html index b4ba5cd..bdfc6ad 100644 --- a/tests/callback.html +++ b/tests/callback.html @@ -8,6 +8,17 @@ +

Hover, click and zoom to test the callbacks:

@@ -19,13 +30,21 @@