Normalize rotation and circumference resolution (#8015)

This commit is contained in:
Jukka Kurkela 2020-11-06 15:06:38 +02:00 committed by GitHub
parent 10ffe753d9
commit d393fa8b51
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -76,6 +76,20 @@ export default class DoughnutController extends DatasetController {
return ringIndex; 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 * Get the maximal rotation & circumference extents
* across all visible datasets. * across all visible datasets.
@ -85,20 +99,18 @@ export default class DoughnutController extends DatasetController {
let max = -TAU; let max = -TAU;
const me = this; const me = this;
const opts = me.chart.options;
for (let i = 0; i < me.chart.data.datasets.length; ++i) { for (let i = 0; i < me.chart.data.datasets.length; ++i) {
if (me.chart.isDatasetVisible(i)) { if (me.chart.isDatasetVisible(i)) {
const dataset = me.chart.data.datasets[i]; const controller = me.chart.getDatasetMeta(i).controller;
const rotation = toRadians(valueOrDefault(dataset.rotation, opts.rotation) - 90); const rotation = controller._getRotation();
const circumference = toRadians(valueOrDefault(dataset.circumference, opts.circumference)); const circumference = controller._getCircumference();
min = Math.min(min, rotation); min = Math.min(min, rotation);
max = Math.max(max, rotation + circumference); max = Math.max(max, rotation + circumference);
} }
} }
return { return {
rotation: min, rotation: min,
circumference: max - min, circumference: max - min,
@ -146,7 +158,7 @@ export default class DoughnutController extends DatasetController {
const me = this; const me = this;
const opts = me.chart.options; const opts = me.chart.options;
const meta = me._cachedMeta; 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; 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 firstOpts = me.resolveDataElementOptions(start, mode);
const sharedOptions = me.getSharedOptions(firstOpts); const sharedOptions = me.getSharedOptions(firstOpts);
const includeOptions = me.includeOptions(mode, sharedOptions); const includeOptions = me.includeOptions(mode, sharedOptions);
let startAngle = toRadians(valueOrDefault(me._config.rotation, opts.rotation) - 90); let startAngle = me._getRotation();
let i; let i;
for (i = 0; i < start; ++i) { for (i = 0; i < start; ++i) {