From 5a3de5163ad6e8c9dde28382feb420025dfe0e77 Mon Sep 17 00:00:00 2001 From: Evert Timberg Date: Mon, 21 Aug 2017 18:17:49 -0400 Subject: [PATCH] When a radial scale is rotated using the startAngle option, the tick labels did not appear in the correct places. (#4682) --- src/scales/scale.radialLinear.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/scales/scale.radialLinear.js b/src/scales/scale.radialLinear.js index 119e478776a..9f59f17887a 100644 --- a/src/scales/scale.radialLinear.js +++ b/src/scales/scale.radialLinear.js @@ -473,6 +473,7 @@ module.exports = function(Chart) { if (opts.display) { var ctx = me.ctx; + var startAngle = this.getIndexAngle(0); // Tick Font var tickFontSize = valueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize); @@ -484,7 +485,6 @@ module.exports = function(Chart) { // Don't draw a centre value (if it is minimum) if (index > 0 || tickOpts.reverse) { var yCenterOffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]); - var yHeight = me.yCenter - yCenterOffset; // Draw circular lines around the scale if (gridLineOpts.display && index !== 0) { @@ -495,12 +495,16 @@ module.exports = function(Chart) { var tickFontColor = valueOrDefault(tickOpts.fontColor, globalDefaults.defaultFontColor); ctx.font = tickLabelFont; + ctx.save(); + ctx.translate(me.xCenter, me.yCenter); + ctx.rotate(startAngle); + if (tickOpts.showLabelBackdrop) { var labelWidth = ctx.measureText(label).width; ctx.fillStyle = tickOpts.backdropColor; ctx.fillRect( - me.xCenter - labelWidth / 2 - tickOpts.backdropPaddingX, - yHeight - tickFontSize / 2 - tickOpts.backdropPaddingY, + -labelWidth / 2 - tickOpts.backdropPaddingX, + -yCenterOffset - tickFontSize / 2 - tickOpts.backdropPaddingY, labelWidth + tickOpts.backdropPaddingX * 2, tickFontSize + tickOpts.backdropPaddingY * 2 ); @@ -509,7 +513,8 @@ module.exports = function(Chart) { ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; ctx.fillStyle = tickFontColor; - ctx.fillText(label, me.xCenter, yHeight); + ctx.fillText(label, 0, -yCenterOffset); + ctx.restore(); } } });