From 2a96d83c2c459a19cc5a366c3e90c488dad8fc8e Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Thu, 9 May 2019 16:54:05 +0300 Subject: [PATCH] Implement layers (z-index) for layout items (#6241) --- docs/axes/styling.md | 2 + src/core/core.controller.js | 34 +- src/core/core.layouts.js | 8 + src/core/core.scale.js | 302 ++++++++++++------ src/scales/scale.radialLinear.js | 186 ++++++----- .../scale.radialLinear/gridlines-no-z.json | 33 ++ .../scale.radialLinear/gridlines-no-z.png | Bin 0 -> 39115 bytes .../scale.radialLinear/gridlines-z.json | 34 ++ .../scale.radialLinear/gridlines-z.png | Bin 0 -> 52534 bytes test/specs/core.scale.tests.js | 133 ++++++++ 10 files changed, 544 insertions(+), 188 deletions(-) create mode 100644 test/fixtures/scale.radialLinear/gridlines-no-z.json create mode 100644 test/fixtures/scale.radialLinear/gridlines-no-z.png create mode 100644 test/fixtures/scale.radialLinear/gridlines-z.json create mode 100644 test/fixtures/scale.radialLinear/gridlines-z.png diff --git a/docs/axes/styling.md b/docs/axes/styling.md index 23b212348..b058498b6 100644 --- a/docs/axes/styling.md +++ b/docs/axes/styling.md @@ -23,6 +23,7 @@ The grid line configuration is nested under the scale configuration in the `grid | `zeroLineBorderDash` | `number[]` | `[]` | Length and spacing of dashes of the grid line for the first index (index 0). See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash). | `zeroLineBorderDashOffset` | `number` | `0.0` | Offset for line dashes of the grid line for the first index (index 0). See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset). | `offsetGridLines` | `boolean` | `false` | If true, grid lines will be shifted to be between labels. This is set to `true` for a category scale in a bar chart by default. +| `z` | `number` | `0` | z-index of gridline layer. Values <= 0 are drawn under datasets, > 0 on top. ## Tick Configuration The tick configuration is nested under the scale configuration in the `ticks` key. It defines options for the tick marks that are generated by the axis. @@ -40,6 +41,7 @@ The tick configuration is nested under the scale configuration in the `ticks` ke | `minor` | `object` | `{}` | Minor ticks configuration. Omitted options are inherited from options above. | `major` | `object` | `{}` | Major ticks configuration. Omitted options are inherited from options above. | `padding` | `number` | `0` | Sets the offset of the tick labels from the axis +| `z` | `number` | `0` | z-index of tick layer. Useful when ticks are drawn on chart area. Values <= 0 are drawn under datasets, > 0 on top. ## Minor Tick Configuration The minorTick configuration is nested under the ticks configuration in the `minor` key. It defines options for the minor tick marks that are generated by the axis. Omitted options are inherited from `ticks` configuration. diff --git a/src/core/core.controller.js b/src/core/core.controller.js index 8abe3978e..168d40b49 100644 --- a/src/core/core.controller.js +++ b/src/core/core.controller.js @@ -169,6 +169,7 @@ helpers.extend(Chart.prototype, /** @lends Chart */ { me.aspectRatio = height ? width / height : null; me.options = config.options; me._bufferedRender = false; + me._layers = []; /** * Provided for backward compatibility, Chart and Chart.Controller have been merged, @@ -495,6 +496,12 @@ helpers.extend(Chart.prototype, /** @lends Chart */ { // Do this before render so that any plugins that need final scale updates can use it plugins.notify(me, 'afterUpdate'); + me._layers.sort(function(a, b) { + return a.z === b.z + ? a._idx - b._idx + : a.z - b.z; + }); + if (me._bufferedRender) { me._bufferedRequest = { duration: config.duration, @@ -520,6 +527,15 @@ helpers.extend(Chart.prototype, /** @lends Chart */ { layouts.update(this, this.width, this.height); + me._layers = []; + helpers.each(me.boxes, function(box) { + me._layers.push.apply(me._layers, box._layers()); + }, me); + + me._layers.forEach(function(item, index) { + item._idx = index; + }); + /** * Provided for backward compatibility, use `afterLayout` instead. * @method IPlugin#afterScaleUpdate @@ -626,6 +642,7 @@ helpers.extend(Chart.prototype, /** @lends Chart */ { draw: function(easingValue) { var me = this; + var i, layers; me.clear(); @@ -643,12 +660,21 @@ helpers.extend(Chart.prototype, /** @lends Chart */ { return; } - // Draw all the scales - helpers.each(me.boxes, function(box) { - box.draw(me.chartArea); - }, me); + // Because of plugin hooks (before/afterDatasetsDraw), datasets can't + // currently be part of layers. Instead, we draw + // layers <= 0 before(default, backward compat), and the rest after + layers = me._layers; + for (i = 0; i < layers.length && layers[i].z <= 0; ++i) { + layers[i].draw(me.chartArea); + } me.drawDatasets(easingValue); + + // Rest of layers + for (; i < layers.length; ++i) { + layers[i].draw(me.chartArea); + } + me._drawTooltip(easingValue); plugins.notify(me, 'afterDraw', [easingValue]); diff --git a/src/core/core.layouts.js b/src/core/core.layouts.js index fbaf96a95..4a0969f62 100644 --- a/src/core/core.layouts.js +++ b/src/core/core.layouts.js @@ -103,6 +103,14 @@ module.exports = { item.fullWidth = item.fullWidth || false; item.position = item.position || 'top'; item.weight = item.weight || 0; + item._layers = item._layers || function() { + return [{ + z: 0, + draw: function() { + item.draw.apply(item, arguments); + } + }]; + }; chart.boxes.push(item); }, diff --git a/src/core/core.scale.js b/src/core/core.scale.js index a4cd62317..cf1fb281e 100644 --- a/src/core/core.scale.js +++ b/src/core/core.scale.js @@ -189,7 +189,7 @@ function parseTickFontOptions(options) { return {minor: minor, major: major}; } -module.exports = Element.extend({ +var Scale = Element.extend({ /** * Get the padding needed for the scale * @method getPadding @@ -252,6 +252,7 @@ module.exports = Element.extend({ me._maxLabelLines = 0; me.longestLabelWidth = 0; me.longestTextCache = me.longestTextCache || {}; + me._itemsToDraw = null; // Dimensions me.beforeSetDimensions(); @@ -780,22 +781,14 @@ module.exports = Element.extend({ }, /** - * Actually draw the scale on the canvas - * @param {object} chartArea - the area of the chart to draw full grid lines on + * @private */ - draw: function(chartArea) { + _computeItemsToDraw: function(chartArea) { var me = this; - var options = me.options; - - if (!me._isVisible()) { - return; - } - var chart = me.chart; - var context = me.ctx; + var options = me.options; var optionTicks = options.ticks; var gridLines = options.gridLines; - var scaleLabel = options.scaleLabel; var position = options.position; var isRotated = me.labelRotation !== 0; @@ -809,12 +802,11 @@ module.exports = Element.extend({ var tl = getTickMarkLength(gridLines); - var scaleLabelFontColor = valueOrDefault(scaleLabel.fontColor, defaults.global.defaultFontColor); - var scaleLabelFont = helpers.options._parseFont(scaleLabel); - var scaleLabelPadding = helpers.options.toPadding(scaleLabel.padding); var labelRotationRadians = helpers.toRadians(me.labelRotation); - var itemsToDraw = []; + var items = []; + + var epsilon = 0.0000001; // 0.0000001 is margin in pixels for Accumulated error. var axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0; var alignPixel = helpers._alignPixel; @@ -838,8 +830,6 @@ module.exports = Element.extend({ tickEnd = me.left + tl; } - var epsilon = 0.0000001; // 0.0000001 is margin in pixels for Accumulated error. - helpers.each(ticks, function(tick, index) { // autoskipper skipped this tick (#4635) if (helpers.isNullOrUndef(tick.label)) { @@ -919,7 +909,7 @@ module.exports = Element.extend({ } } - itemsToDraw.push({ + items.push({ tx1: tx1, ty1: ty1, tx2: tx2, @@ -937,107 +927,74 @@ module.exports = Element.extend({ rotation: -1 * labelRotationRadians, label: label, major: tick.major, + font: tick.major ? tickFonts.major : tickFonts.minor, textOffset: textOffset, textAlign: textAlign }); }); - // Draw all of the tick labels, tick marks, and grid lines at the correct places - helpers.each(itemsToDraw, function(itemToDraw) { - var glWidth = itemToDraw.glWidth; - var glColor = itemToDraw.glColor; - - if (gridLines.display && glWidth && glColor) { - context.save(); - context.lineWidth = glWidth; - context.strokeStyle = glColor; - if (context.setLineDash) { - context.setLineDash(itemToDraw.glBorderDash); - context.lineDashOffset = itemToDraw.glBorderDashOffset; + items.ticksLength = ticks.length; + items.borderValue = borderValue; + + return items; + }, + + /** + * @private + */ + _drawGrid: function(chartArea) { + var me = this; + var ctx = me.ctx; + var chart = me.chart; + var gridLines = me.options.gridLines; + + if (!gridLines.display) { + return; + } + + var alignPixel = helpers._alignPixel; + var axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0; + var items = me._itemsToDraw || (me._itemsToDraw = me._computeItemsToDraw(chartArea)); + var glWidth, glColor; + + helpers.each(items, function(item) { + glWidth = item.glWidth; + glColor = item.glColor; + + if (glWidth && glColor) { + ctx.save(); + ctx.lineWidth = glWidth; + ctx.strokeStyle = glColor; + if (ctx.setLineDash) { + ctx.setLineDash(item.glBorderDash); + ctx.lineDashOffset = item.glBorderDashOffset; } - context.beginPath(); + ctx.beginPath(); if (gridLines.drawTicks) { - context.moveTo(itemToDraw.tx1, itemToDraw.ty1); - context.lineTo(itemToDraw.tx2, itemToDraw.ty2); + ctx.moveTo(item.tx1, item.ty1); + ctx.lineTo(item.tx2, item.ty2); } if (gridLines.drawOnChartArea) { - context.moveTo(itemToDraw.x1, itemToDraw.y1); - context.lineTo(itemToDraw.x2, itemToDraw.y2); + ctx.moveTo(item.x1, item.y1); + ctx.lineTo(item.x2, item.y2); } - context.stroke(); - context.restore(); - } - - if (optionTicks.display) { - var tickFont = itemToDraw.major ? tickFonts.major : tickFonts.minor; - - // Make sure we draw text in the correct color and font - context.save(); - context.translate(itemToDraw.labelX, itemToDraw.labelY); - context.rotate(itemToDraw.rotation); - context.font = tickFont.string; - context.fillStyle = tickFont.color; - context.textBaseline = 'middle'; - context.textAlign = itemToDraw.textAlign; - - var label = itemToDraw.label; - var y = itemToDraw.textOffset; - if (helpers.isArray(label)) { - for (var i = 0; i < label.length; ++i) { - // We just make sure the multiline element is a string here.. - context.fillText('' + label[i], 0, y); - y += tickFont.lineHeight; - } - } else { - context.fillText(label, 0, y); - } - context.restore(); + ctx.stroke(); + ctx.restore(); } }); - if (scaleLabel.display) { - // Draw the scale label - var scaleLabelX; - var scaleLabelY; - var rotation = 0; - var halfLineHeight = scaleLabelFont.lineHeight / 2; - - if (isHorizontal) { - scaleLabelX = me.left + ((me.right - me.left) / 2); // midpoint of the width - scaleLabelY = position === 'bottom' - ? me.bottom - halfLineHeight - scaleLabelPadding.bottom - : me.top + halfLineHeight + scaleLabelPadding.top; - } else { - var isLeft = position === 'left'; - scaleLabelX = isLeft - ? me.left + halfLineHeight + scaleLabelPadding.top - : me.right - halfLineHeight - scaleLabelPadding.top; - scaleLabelY = me.top + ((me.bottom - me.top) / 2); - rotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI; - } - - context.save(); - context.translate(scaleLabelX, scaleLabelY); - context.rotate(rotation); - context.textAlign = 'center'; - context.textBaseline = 'middle'; - context.fillStyle = scaleLabelFontColor; // render in correct colour - context.font = scaleLabelFont.string; - context.fillText(scaleLabel.labelString, 0, 0); - context.restore(); - } - if (axisWidth) { // Draw the line at the edge of the axis var firstLineWidth = axisWidth; - var lastLineWidth = valueAtIndexOrDefault(gridLines.lineWidth, ticks.length - 1, 0); + var lastLineWidth = valueAtIndexOrDefault(gridLines.lineWidth, items.ticksLength - 1, 0); + var borderValue = items.borderValue; var x1, x2, y1, y2; - if (isHorizontal) { + if (me.isHorizontal()) { x1 = alignPixel(chart, me.left, firstLineWidth) - firstLineWidth / 2; x2 = alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2; y1 = y2 = borderValue; @@ -1047,12 +1004,149 @@ module.exports = Element.extend({ x1 = x2 = borderValue; } - context.lineWidth = axisWidth; - context.strokeStyle = valueAtIndexOrDefault(gridLines.color, 0); - context.beginPath(); - context.moveTo(x1, y1); - context.lineTo(x2, y2); - context.stroke(); + ctx.lineWidth = axisWidth; + ctx.strokeStyle = valueAtIndexOrDefault(gridLines.color, 0); + ctx.beginPath(); + ctx.moveTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.stroke(); + } + }, + + /** + * @private + */ + _drawLabels: function(chartArea) { + var me = this; + var ctx = me.ctx; + var optionTicks = me.options.ticks; + + if (!optionTicks.display) { + return; + } + + var items = me._itemsToDraw || (me._itemsToDraw = me._computeItemsToDraw(chartArea)); + var tickFont; + + helpers.each(items, function(item) { + tickFont = item.font; + + // Make sure we draw text in the correct color and font + ctx.save(); + ctx.translate(item.labelX, item.labelY); + ctx.rotate(item.rotation); + ctx.font = tickFont.string; + ctx.fillStyle = tickFont.color; + ctx.textBaseline = 'middle'; + ctx.textAlign = item.textAlign; + + var label = item.label; + var y = item.textOffset; + if (helpers.isArray(label)) { + for (var i = 0; i < label.length; ++i) { + // We just make sure the multiline element is a string here.. + ctx.fillText('' + label[i], 0, y); + y += tickFont.lineHeight; + } + } else { + ctx.fillText(label, 0, y); + } + ctx.restore(); + }); + }, + + /** + * @private + */ + _drawTitle: function() { + var me = this; + var ctx = me.ctx; + var options = me.options; + var scaleLabel = options.scaleLabel; + + if (!scaleLabel.display) { + return; } + + var scaleLabelFontColor = valueOrDefault(scaleLabel.fontColor, defaults.global.defaultFontColor); + var scaleLabelFont = helpers.options._parseFont(scaleLabel); + var scaleLabelPadding = helpers.options.toPadding(scaleLabel.padding); + var halfLineHeight = scaleLabelFont.lineHeight / 2; + var position = options.position; + var rotation = 0; + var scaleLabelX, scaleLabelY; + + if (me.isHorizontal()) { + scaleLabelX = me.left + ((me.right - me.left) / 2); // midpoint of the width + scaleLabelY = position === 'bottom' + ? me.bottom - halfLineHeight - scaleLabelPadding.bottom + : me.top + halfLineHeight + scaleLabelPadding.top; + } else { + var isLeft = position === 'left'; + scaleLabelX = isLeft + ? me.left + halfLineHeight + scaleLabelPadding.top + : me.right - halfLineHeight - scaleLabelPadding.top; + scaleLabelY = me.top + ((me.bottom - me.top) / 2); + rotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI; + } + + ctx.save(); + ctx.translate(scaleLabelX, scaleLabelY); + ctx.rotate(rotation); + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.fillStyle = scaleLabelFontColor; // render in correct colour + ctx.font = scaleLabelFont.string; + ctx.fillText(scaleLabel.labelString, 0, 0); + ctx.restore(); + }, + + draw: function(chartArea) { + var me = this; + + if (!me._isVisible()) { + return; + } + + me._drawGrid(chartArea); + me._drawTitle(chartArea); + me._drawLabels(chartArea); + }, + + /** + * @private + */ + _layers: function() { + var me = this; + var opts = me.options; + var tz = opts.ticks && opts.ticks.z || 0; + var gz = opts.gridLines && opts.gridLines.z || 0; + + if (!me._isVisible() || tz === gz || me.draw !== me._draw) { + // backward compatibility: draw has been overridden by custom scale + return [{ + z: tz, + draw: function() { + me.draw.apply(me, arguments); + } + }]; + } + + return [{ + z: gz, + draw: function() { + me._drawGrid.apply(me, arguments); + me._drawTitle.apply(me, arguments); + } + }, { + z: tz, + draw: function() { + me._drawLabels.apply(me, arguments); + } + }]; } }); + +Scale.prototype._draw = Scale.prototype.draw; + +module.exports = Scale; diff --git a/src/scales/scale.radialLinear.js b/src/scales/scale.radialLinear.js index f75e594ad..47b1089d9 100644 --- a/src/scales/scale.radialLinear.js +++ b/src/scales/scale.radialLinear.js @@ -224,53 +224,30 @@ function adjustPointPositionForLabelHeight(angle, textSize, position) { function drawPointLabels(scale) { var ctx = scale.ctx; var opts = scale.options; - var angleLineOpts = opts.angleLines; - var gridLineOpts = opts.gridLines; var pointLabelOpts = opts.pointLabels; - var lineWidth = valueOrDefault(angleLineOpts.lineWidth, gridLineOpts.lineWidth); - var lineColor = valueOrDefault(angleLineOpts.color, gridLineOpts.color); var tickBackdropHeight = getTickBackdropHeight(opts); - - ctx.save(); - ctx.lineWidth = lineWidth; - ctx.strokeStyle = lineColor; - if (ctx.setLineDash) { - ctx.setLineDash(resolve([angleLineOpts.borderDash, gridLineOpts.borderDash, []])); - ctx.lineDashOffset = resolve([angleLineOpts.borderDashOffset, gridLineOpts.borderDashOffset, 0.0]); - } - var outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max); - - // Point Label Font var plFont = helpers.options._parseFont(pointLabelOpts); + ctx.save(); + ctx.font = plFont.string; ctx.textBaseline = 'middle'; for (var i = getValueCount(scale) - 1; i >= 0; i--) { - if (angleLineOpts.display && lineWidth && lineColor) { - var outerPosition = scale.getPointPosition(i, outerDistance); - ctx.beginPath(); - ctx.moveTo(scale.xCenter, scale.yCenter); - ctx.lineTo(outerPosition.x, outerPosition.y); - ctx.stroke(); - } - - if (pointLabelOpts.display) { - // Extra pixels out for some label spacing - var extra = (i === 0 ? tickBackdropHeight / 2 : 0); - var pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + 5); + // Extra pixels out for some label spacing + var extra = (i === 0 ? tickBackdropHeight / 2 : 0); + var pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + 5); - // Keep this in loop since we may support array properties here - var pointLabelFontColor = valueAtIndexOrDefault(pointLabelOpts.fontColor, i, defaults.global.defaultFontColor); - ctx.fillStyle = pointLabelFontColor; + // Keep this in loop since we may support array properties here + var pointLabelFontColor = valueAtIndexOrDefault(pointLabelOpts.fontColor, i, defaults.global.defaultFontColor); + ctx.fillStyle = pointLabelFontColor; - var angleRadians = scale.getIndexAngle(i); - var angle = helpers.toDegrees(angleRadians); - ctx.textAlign = getTextAlignForAngle(angle); - adjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition); - fillText(ctx, scale.pointLabels[i] || '', pointLabelPosition, plFont.lineHeight); - } + var angleRadians = scale.getIndexAngle(i); + var angle = helpers.toDegrees(angleRadians); + ctx.textAlign = getTextAlignForAngle(angle); + adjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition); + fillText(ctx, scale.pointLabels[i] || '', pointLabelPosition, plFont.lineHeight); } ctx.restore(); } @@ -473,60 +450,109 @@ module.exports = LinearScaleBase.extend({ 0); }, - draw: function() { + /** + * @private + */ + _drawGrid: function() { var me = this; + var ctx = me.ctx; var opts = me.options; var gridLineOpts = opts.gridLines; - var tickOpts = opts.ticks; + var angleLineOpts = opts.angleLines; + var lineWidth = valueOrDefault(angleLineOpts.lineWidth, gridLineOpts.lineWidth); + var lineColor = valueOrDefault(angleLineOpts.color, gridLineOpts.color); + var i, offset, position; + + if (opts.pointLabels.display) { + drawPointLabels(me); + } - if (opts.display) { - var ctx = me.ctx; - var startAngle = this.getIndexAngle(0); - var tickFont = helpers.options._parseFont(tickOpts); + if (gridLineOpts.display) { + helpers.each(me.ticks, function(label, index) { + if (index !== 0) { + offset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]); + drawRadiusLine(me, gridLineOpts, offset, index); + } + }); + } - if (opts.angleLines.display || opts.pointLabels.display) { - drawPointLabels(me); + if (angleLineOpts.display && lineWidth && lineColor) { + ctx.save(); + ctx.lineWidth = lineWidth; + ctx.strokeStyle = lineColor; + if (ctx.setLineDash) { + ctx.setLineDash(resolve([angleLineOpts.borderDash, gridLineOpts.borderDash, []])); + ctx.lineDashOffset = resolve([angleLineOpts.borderDashOffset, gridLineOpts.borderDashOffset, 0.0]); } - helpers.each(me.ticks, function(label, index) { - // Don't draw a centre value (if it is minimum) - if (index > 0 || tickOpts.reverse) { - var yCenterOffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]); + for (i = getValueCount(me) - 1; i >= 0; i--) { + offset = me.getDistanceFromCenterForValue(opts.ticks.reverse ? me.min : me.max); + position = me.getPointPosition(i, offset); + ctx.beginPath(); + ctx.moveTo(me.xCenter, me.yCenter); + ctx.lineTo(position.x, position.y); + ctx.stroke(); + } - // Draw circular lines around the scale - if (gridLineOpts.display && index !== 0) { - drawRadiusLine(me, gridLineOpts, yCenterOffset, index); - } + ctx.restore(); + } + }, - if (tickOpts.display) { - var tickFontColor = valueOrDefault(tickOpts.fontColor, defaults.global.defaultFontColor); - ctx.font = tickFont.string; - - 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( - -labelWidth / 2 - tickOpts.backdropPaddingX, - -yCenterOffset - tickFont.size / 2 - tickOpts.backdropPaddingY, - labelWidth + tickOpts.backdropPaddingX * 2, - tickFont.size + tickOpts.backdropPaddingY * 2 - ); - } - - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - ctx.fillStyle = tickFontColor; - ctx.fillText(label, 0, -yCenterOffset); - ctx.restore(); - } - } - }); + /** + * @private + */ + _drawLabels: function() { + var me = this; + var ctx = me.ctx; + var opts = me.options; + var tickOpts = opts.ticks; + + if (!tickOpts.display) { + return; } - } + + var startAngle = me.getIndexAngle(0); + var tickFont = helpers.options._parseFont(tickOpts); + var tickFontColor = valueOrDefault(tickOpts.fontColor, defaults.global.defaultFontColor); + var offset, width; + + ctx.save(); + ctx.font = tickFont.string; + ctx.translate(me.xCenter, me.yCenter); + ctx.rotate(startAngle); + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + + helpers.each(me.ticks, function(label, index) { + if (index === 0 && !tickOpts.reverse) { + return; + } + + offset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]); + + if (tickOpts.showLabelBackdrop) { + width = ctx.measureText(label).width; + ctx.fillStyle = tickOpts.backdropColor; + + ctx.fillRect( + -width / 2 - tickOpts.backdropPaddingX, + -offset - tickFont.size / 2 - tickOpts.backdropPaddingY, + width + tickOpts.backdropPaddingX * 2, + tickFont.size + tickOpts.backdropPaddingY * 2 + ); + } + + ctx.fillStyle = tickFontColor; + ctx.fillText(label, 0, -offset); + }); + + ctx.restore(); + }, + + /** + * @private + */ + _drawTitle: helpers.noop }); // INTERNAL: static default options, registered in src/index.js diff --git a/test/fixtures/scale.radialLinear/gridlines-no-z.json b/test/fixtures/scale.radialLinear/gridlines-no-z.json new file mode 100644 index 000000000..362c51904 --- /dev/null +++ b/test/fixtures/scale.radialLinear/gridlines-no-z.json @@ -0,0 +1,33 @@ +{ + "config": { + "type": "radar", + "data": { + "labels": ["A", "B", "C", "D", "E"], + "datasets": [{ + "backgroundColor": "rgba(255, 0, 0, 1)", + "data": [1,2,3,3,3] + }] + }, + "options": { + "responsive": false, + "legend": false, + "title": false, + "scale": { + "gridLines": { + "color": "rgba(0, 0, 0, 1)", + "lineWidth": 1 + }, + "angleLines": { + "color": "rgba(0, 0, 255, 1)", + "lineWidth": 1 + }, + "pointLabels": { + "display": false + }, + "ticks": { + "display": false + } + } + } + } +} diff --git a/test/fixtures/scale.radialLinear/gridlines-no-z.png b/test/fixtures/scale.radialLinear/gridlines-no-z.png new file mode 100644 index 0000000000000000000000000000000000000000..c545c564d53b657c60a52f2ab9fe38a20f79cf2b GIT binary patch literal 39115 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 literal 0 Hc-jL100001 diff --git a/test/fixtures/scale.radialLinear/gridlines-z.json b/test/fixtures/scale.radialLinear/gridlines-z.json new file mode 100644 index 000000000..add497b9a --- /dev/null +++ b/test/fixtures/scale.radialLinear/gridlines-z.json @@ -0,0 +1,34 @@ +{ + "config": { + "type": "radar", + "data": { + "labels": ["A", "B", "C", "D", "E"], + "datasets": [{ + "backgroundColor": "rgba(255, 0, 0, 1)", + "data": [1,2,3,3,3] + }] + }, + "options": { + "responsive": false, + "legend": false, + "title": false, + "scale": { + "gridLines": { + "color": "rgba(0, 0, 0, 1)", + "lineWidth": 1, + "z": 1 + }, + "angleLines": { + "color": "rgba(0, 0, 255, 1)", + "lineWidth": 1 + }, + "pointLabels": { + "display": false + }, + "ticks": { + "display": false + } + } + } + } +} diff --git a/test/fixtures/scale.radialLinear/gridlines-z.png b/test/fixtures/scale.radialLinear/gridlines-z.png new file mode 100644 index 0000000000000000000000000000000000000000..61485f315e1545c0d78c51b7fac795b173c7633e GIT binary patch literal 52534 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�H3pR!u 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