]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Normalize rotation and circumference resolution (#8015)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Fri, 6 Nov 2020 13:06:38 +0000 (15:06 +0200)
committerGitHub <noreply@github.com>
Fri, 6 Nov 2020 13:06:38 +0000 (08:06 -0500)
src/controllers/controller.doughnut.js

index cee66e6639ab60f36974da30668e8bf95ab5c7ad..742be55f7ffc7de707df7aa968fa718b55913822 100644 (file)
@@ -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) {