From 0cdadd2560f1a1f0dfbb1d8d65707030415d07cf Mon Sep 17 00:00:00 2001 From: Evert Timberg Date: Sun, 5 Sep 2021 13:07:28 -0400 Subject: [PATCH] Enable per-corner border radius in tooltip (#9620) --- docs/configuration/tooltip.md | 2 +- src/plugins/plugin.tooltip.js | 33 ++++---- test/fixtures/plugin.tooltip/corner-radius.js | 78 ++++++++++++++++++ .../fixtures/plugin.tooltip/corner-radius.png | Bin 0 -> 36123 bytes types/index.esm.d.ts | 2 +- 5 files changed, 97 insertions(+), 18 deletions(-) create mode 100644 test/fixtures/plugin.tooltip/corner-radius.js create mode 100644 test/fixtures/plugin.tooltip/corner-radius.png diff --git a/docs/configuration/tooltip.md b/docs/configuration/tooltip.md index 4874120f1..936f9202c 100644 --- a/docs/configuration/tooltip.md +++ b/docs/configuration/tooltip.md @@ -32,7 +32,7 @@ Namespace: `options.plugins.tooltip`, the global options for the chart tooltips | `padding` | [`Padding`](../general/padding.md) | `6` | Padding inside the tooltip. | `caretPadding` | `number` | `2` | Extra distance to move the end of the tooltip arrow away from the tooltip point. | `caretSize` | `number` | `5` | Size, in px, of the tooltip arrow. -| `cornerRadius` | `number` | `6` | Radius of tooltip corner curves. +| `cornerRadius` | `number`\|`object` | `6` | Radius of tooltip corner curves. | `multiKeyBackground` | [`Color`](../general/colors.md) | `'#fff'` | Color to draw behind the colored boxes when multiple items are in the tooltip. | `displayColors` | `boolean` | `true` | If true, color boxes are shown in the tooltip. | `boxWidth` | `number` | `bodyFont.size` | Width of the color box if displayColors is true. diff --git a/src/plugins/plugin.tooltip.js b/src/plugins/plugin.tooltip.js index b852e7ee4..231506b73 100644 --- a/src/plugins/plugin.tooltip.js +++ b/src/plugins/plugin.tooltip.js @@ -294,7 +294,7 @@ function getBackgroundPoint(options, size, alignment, chart) { const {caretSize, caretPadding, cornerRadius} = options; const {xAlign, yAlign} = alignment; const paddingAndSize = caretSize + caretPadding; - const radiusAndPadding = cornerRadius + caretPadding; + const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius); let x = alignX(size, xAlign); const y = alignY(size, yAlign, paddingAndSize); @@ -306,9 +306,9 @@ function getBackgroundPoint(options, size, alignment, chart) { x -= paddingAndSize; } } else if (xAlign === 'left') { - x -= radiusAndPadding; + x -= Math.max(topLeft, bottomLeft) + caretPadding; } else if (xAlign === 'right') { - x += radiusAndPadding; + x += Math.max(topRight, bottomRight) + caretPadding; } return { @@ -588,7 +588,8 @@ export class Tooltip extends Element { getCaretPosition(tooltipPoint, size, options) { const {xAlign, yAlign} = this; - const {cornerRadius, caretSize} = options; + const {caretSize, cornerRadius} = options; + const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius); const {x: ptX, y: ptY} = tooltipPoint; const {width, height} = size; let x1, x2, x3, y1, y2, y3; @@ -615,9 +616,9 @@ export class Tooltip extends Element { x3 = x1; } else { if (xAlign === 'left') { - x2 = ptX + cornerRadius + (caretSize); + x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize); } else if (xAlign === 'right') { - x2 = ptX + width - cornerRadius - caretSize; + x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize; } else { x2 = this.caretX; } @@ -855,34 +856,34 @@ export class Tooltip extends Element { const {xAlign, yAlign} = this; const {x, y} = pt; const {width, height} = tooltipSize; - const radius = options.cornerRadius; + const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius); ctx.fillStyle = options.backgroundColor; ctx.strokeStyle = options.borderColor; ctx.lineWidth = options.borderWidth; ctx.beginPath(); - ctx.moveTo(x + radius, y); + ctx.moveTo(x + topLeft, y); if (yAlign === 'top') { this.drawCaret(pt, ctx, tooltipSize, options); } - ctx.lineTo(x + width - radius, y); - ctx.quadraticCurveTo(x + width, y, x + width, y + radius); + ctx.lineTo(x + width - topRight, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + topRight); if (yAlign === 'center' && xAlign === 'right') { this.drawCaret(pt, ctx, tooltipSize, options); } - ctx.lineTo(x + width, y + height - radius); - ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height); + ctx.lineTo(x + width, y + height - bottomRight); + ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height); if (yAlign === 'bottom') { this.drawCaret(pt, ctx, tooltipSize, options); } - ctx.lineTo(x + radius, y + height); - ctx.quadraticCurveTo(x, y + height, x, y + height - radius); + ctx.lineTo(x + bottomLeft, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft); if (yAlign === 'center' && xAlign === 'left') { this.drawCaret(pt, ctx, tooltipSize, options); } - ctx.lineTo(x, y + radius); - ctx.quadraticCurveTo(x, y, x + radius, y); + ctx.lineTo(x, y + topLeft); + ctx.quadraticCurveTo(x, y, x + topLeft, y); ctx.closePath(); ctx.fill(); diff --git a/test/fixtures/plugin.tooltip/corner-radius.js b/test/fixtures/plugin.tooltip/corner-radius.js new file mode 100644 index 000000000..e5c98a462 --- /dev/null +++ b/test/fixtures/plugin.tooltip/corner-radius.js @@ -0,0 +1,78 @@ +const data = []; +for (let x = 0; x < 3; x++) { + for (let y = 0; y < 3; y++) { + data.push({x, y}); + } +} + +module.exports = { + config: { + type: 'scatter', + data: { + datasets: [{ + data, + backgroundColor: 'red', + radius: 1, + hoverRadius: 0 + }], + }, + options: { + scales: { + x: {display: false}, + y: {display: false} + }, + plugins: { + legend: false, + title: false, + filler: false, + tooltip: { + mode: 'point', + intersect: true, + // spriteText: use white background to hide any gaps between fonts + backgroundColor: 'white', + borderColor: 'black', + borderWidth: 1, + callbacks: { + beforeLabel: () => 'before label', + label: () => 'label', + afterLabel: () => 'after1\nafter2\nafter3\nafter4\nafter5' + }, + cornerRadius: { + topLeft: 10, + topRight: 20, + bottomRight: 5, + bottomLeft: 0, + } + }, + }, + }, + plugins: [{ + afterDraw: function(chart) { + const canvas = chart.canvas; + const rect = canvas.getBoundingClientRect(); + const meta = chart.getDatasetMeta(0); + let point, event; + + for (let i = 0; i < data.length; i++) { + point = meta.data[i]; + event = { + type: 'mousemove', + target: canvas, + clientX: rect.left + point.x, + clientY: rect.top + point.y + }; + chart._handleEvent(event); + chart.tooltip.handleEvent(event); + chart.tooltip.draw(chart.ctx); + } + } + }] + }, + options: { + spriteText: true, + canvas: { + height: 400, + width: 500 + } + } +}; diff --git a/test/fixtures/plugin.tooltip/corner-radius.png b/test/fixtures/plugin.tooltip/corner-radius.png new file mode 100644 index 0000000000000000000000000000000000000000..0e71cb26f99cbf1236f8841d3f25e8d013be7516 GIT binary patch literal 36123 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 extends Cor * Radius of tooltip corner curves. * @default 6 */ - cornerRadius: Scriptable>; + cornerRadius: Scriptable>; /** * Color to draw behind the colored boxes when multiple items are in the tooltip. * @default '#fff'