diff --git a/docs/09-Advanced.md b/docs/09-Advanced.md index ff2810f85..2641856c5 100644 --- a/docs/09-Advanced.md +++ b/docs/09-Advanced.md @@ -399,7 +399,10 @@ Plugins should derive from Chart.PluginBase and implement the following interfac // Easing is for animation beforeDraw: function(chartInstance, easing) { }, - afterDraw: function(chartInstance, easing) { } + afterDraw: function(chartInstance, easing) { }, + // Before the datasets are drawn but after scales are drawn + beforeDatasetDraw: function(chartInstance, easing) { }, + afterDatasetDraw: function(chartInstance, easing) { }, destroy: function(chartInstance) { } } diff --git a/src/core/core.controller.js b/src/core/core.controller.js index 41b37d293..0e103d2bd 100644 --- a/src/core/core.controller.js +++ b/src/core/core.controller.js @@ -288,12 +288,7 @@ module.exports = function(Chart) { this.scale.draw(); } - // Clip out the chart area so that anything outside does not draw. This is necessary for zoom and pan to function - var context = this.chart.ctx; - context.save(); - context.beginPath(); - context.rect(this.chartArea.left, this.chartArea.top, this.chartArea.right - this.chartArea.left, this.chartArea.bottom - this.chartArea.top); - context.clip(); + Chart.pluginService.notifyPlugins('beforeDatasetDraw', [this, easingDecimal]); // Draw each dataset via its respective controller (reversed to support proper line stacking) helpers.each(this.data.datasets, function(dataset, datasetIndex) { @@ -302,8 +297,7 @@ module.exports = function(Chart) { } }, this, true); - // Restore from the clipping operation - context.restore(); + Chart.pluginService.notifyPlugins('afterDatasetDraw', [this, easingDecimal]); // Finally draw the tooltip this.tooltip.transition(easingDecimal).draw();