From f10fab65911ac73a0781d8a9fb3ea251e38e6734 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Tue, 30 Nov 2021 00:02:00 +0200 Subject: [PATCH] Fix tooltip caret position when it is positioned at the corners (#9922) * Fix tooltip caret position when at the corners * Add test Co-authored-by: Dirk Gausmann --- src/plugins/plugin.tooltip.js | 4 +- .../fixtures/plugin.tooltip/caret-position.js | 70 ++++++++++++++++++ .../plugin.tooltip/caret-position.png | Bin 0 -> 13795 bytes 3 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/plugin.tooltip/caret-position.js create mode 100644 test/fixtures/plugin.tooltip/caret-position.png diff --git a/src/plugins/plugin.tooltip.js b/src/plugins/plugin.tooltip.js index fd068e7aa..323bafa3a 100644 --- a/src/plugins/plugin.tooltip.js +++ b/src/plugins/plugin.tooltip.js @@ -306,9 +306,9 @@ function getBackgroundPoint(options, size, alignment, chart) { x -= paddingAndSize; } } else if (xAlign === 'left') { - x -= Math.max(topLeft, bottomLeft) + caretPadding; + x -= Math.max(topLeft, bottomLeft) + caretSize; } else if (xAlign === 'right') { - x += Math.max(topRight, bottomRight) + caretPadding; + x += Math.max(topRight, bottomRight) + caretSize; } return { diff --git a/test/fixtures/plugin.tooltip/caret-position.js b/test/fixtures/plugin.tooltip/caret-position.js new file mode 100644 index 000000000..0997c11b2 --- /dev/null +++ b/test/fixtures/plugin.tooltip/caret-position.js @@ -0,0 +1,70 @@ +const data = []; +for (let x = 1; x < 4; x++) { + for (let y = 1; y < 4; y++) { + data.push({x, y}); + } +} + +module.exports = { + config: { + type: 'scatter', + data: { + datasets: [{ + data, + backgroundColor: 'red', + radius: 8, + hoverRadius: 0 + }], + }, + options: { + scales: { + x: {display: false, min: 0.96, max: 3.04}, + y: {display: false, min: 1, max: 3} + }, + 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: { + label: () => 'label', + } + }, + }, + }, + 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: 240, + width: 320 + } + } +}; diff --git a/test/fixtures/plugin.tooltip/caret-position.png b/test/fixtures/plugin.tooltip/caret-position.png new file mode 100644 index 0000000000000000000000000000000000000000..147f87e5bf3e2dc1b7d69c813adc4bdb210ffd99 GIT binary patch literal 13795 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 V^A^l^Gy(8Zka;6rE@>R_{{T4D$L0V4 literal 0 Hc-jL100001 -- 2.47.3