diff --git a/src/controllers/controller.doughnut.js b/src/controllers/controller.doughnut.js index cee66e663..742be55f7 100644 --- a/src/controllers/controller.doughnut.js +++ b/src/controllers/controller.doughnut.js @@ -76,6 +76,20 @@ export default class DoughnutController extends DatasetController { return ringIndex; } + /** + * @private + */ + _getRotation() { + return toRadians(valueOrDefault(this._config.rotation, this.chart.options.rotation) - 90); + } + + /** + * @private + */ + _getCircumference() { + return toRadians(valueOrDefault(this._config.circumference, this.chart.options.circumference)); + } + /** * Get the maximal rotation & circumference extents * across all visible datasets. @@ -85,20 +99,18 @@ export default class DoughnutController extends DatasetController { let max = -TAU; const me = this; - const opts = me.chart.options; for (let i = 0; i < me.chart.data.datasets.length; ++i) { if (me.chart.isDatasetVisible(i)) { - const dataset = me.chart.data.datasets[i]; - const rotation = toRadians(valueOrDefault(dataset.rotation, opts.rotation) - 90); - const circumference = toRadians(valueOrDefault(dataset.circumference, opts.circumference)); + const controller = me.chart.getDatasetMeta(i).controller; + const rotation = controller._getRotation(); + const circumference = controller._getCircumference(); min = Math.min(min, rotation); max = Math.max(max, rotation + circumference); } } - return { rotation: min, circumference: max - min, @@ -146,7 +158,7 @@ export default class DoughnutController extends DatasetController { const me = this; const opts = me.chart.options; const meta = me._cachedMeta; - const circumference = toRadians(valueOrDefault(me._config.circumference, opts.circumference)); + const circumference = me._getCircumference(); return reset && opts.animation.animateRotate ? 0 : this.chart.getDataVisibility(i) ? me.calculateCircumference(meta._parsed[i] * circumference / TAU) : 0; } @@ -165,7 +177,7 @@ export default class DoughnutController extends DatasetController { const firstOpts = me.resolveDataElementOptions(start, mode); const sharedOptions = me.getSharedOptions(firstOpts); const includeOptions = me.includeOptions(mode, sharedOptions); - let startAngle = toRadians(valueOrDefault(me._config.rotation, opts.rotation) - 90); + let startAngle = me._getRotation(); let i; for (i = 0; i < start; ++i) {