From: Jukka Kurkela Date: Tue, 20 Jul 2021 11:57:56 +0000 (+0300) Subject: Fix interaction on partially visible bar (#9446) X-Git-Tag: v3.5.0~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ba2f158dc6c71ffe7bb92a235dfab6aed69f138d;p=thirdparty%2FChart.js.git Fix interaction on partially visible bar (#9446) --- diff --git a/src/core/core.interaction.js b/src/core/core.interaction.js index fbfaf6ebb..5365f6c91 100644 --- a/src/core/core.interaction.js +++ b/src/core/core.interaction.js @@ -166,7 +166,7 @@ function getNearestItems(chart, position, axis, intersect, useFinalPosition) { } const center = element.getCenterPoint(useFinalPosition); - if (!_isPointInArea(center, chart.chartArea, chart._minPadding)) { + if (!_isPointInArea(center, chart.chartArea, chart._minPadding) && !element.inRange(position.x, position.y, useFinalPosition)) { return; } const distance = distanceMetric(position, center); diff --git a/test/fixtures/core.interaction/nearest-partial-bar.js b/test/fixtures/core.interaction/nearest-partial-bar.js new file mode 100644 index 000000000..420f849c9 --- /dev/null +++ b/test/fixtures/core.interaction/nearest-partial-bar.js @@ -0,0 +1,42 @@ +module.exports = { + config: { + type: 'bar', + data: { + labels: ['a', 'b', 'c'], + datasets: [ + { + data: [220, 250, 225], + }, + ], + }, + options: { + events: ['click'], + interaction: { + mode: 'nearest' + }, + plugins: { + tooltip: true, + legend: false + }, + scales: { + y: { + beginAtZero: false + } + } + } + }, + options: { + spriteText: true, + canvas: { + width: 256, + height: 256 + }, + async run(chart) { + const point = { + x: chart.chartArea.left + chart.chartArea.width / 2, + y: chart.chartArea.top + chart.chartArea.height / 2, + }; + await jasmine.triggerMouseEvent(chart, 'click', point); + } + } +}; diff --git a/test/fixtures/core.interaction/nearest-partial-bar.png b/test/fixtures/core.interaction/nearest-partial-bar.png new file mode 100644 index 000000000..907795294 Binary files /dev/null and b/test/fixtures/core.interaction/nearest-partial-bar.png differ diff --git a/test/fixtures/core.interaction/nearest-point-behind-scale.js b/test/fixtures/core.interaction/nearest-point-behind-scale.js new file mode 100644 index 000000000..6dfa25c1a --- /dev/null +++ b/test/fixtures/core.interaction/nearest-point-behind-scale.js @@ -0,0 +1,45 @@ +module.exports = { + config: { + type: 'scatter', + data: { + datasets: [{ + data: [{x: 1, y: 1}, {x: 48, y: 1}] + }] + }, + options: { + events: ['click'], + interaction: { + mode: 'nearest', + intersect: false + }, + plugins: { + tooltip: true, + legend: false + }, + scales: { + x: { + min: 5, + max: 50 + }, + y: { + min: 0, + max: 2 + } + }, + layout: { + padding: 50 + } + } + }, + options: { + spriteText: true, + canvas: { + width: 256, + height: 256 + }, + async run(chart) { + const point = chart.getDatasetMeta(0).data[0]; + await jasmine.triggerMouseEvent(chart, 'click', {y: point.y, x: chart.chartArea.left}); + } + } +}; diff --git a/test/fixtures/core.interaction/nearest-point-behind-scale.png b/test/fixtures/core.interaction/nearest-point-behind-scale.png new file mode 100644 index 000000000..42d92874d Binary files /dev/null and b/test/fixtures/core.interaction/nearest-point-behind-scale.png differ diff --git a/test/specs/core.interaction.tests.js b/test/specs/core.interaction.tests.js index a3ce810db..f3e27aacb 100644 --- a/test/specs/core.interaction.tests.js +++ b/test/specs/core.interaction.tests.js @@ -1,7 +1,6 @@ -// Tests of the interaction handlers in Core.Interaction - -// Test the rectangle element describe('Core.Interaction', function() { + describe('auto', jasmine.fixture.specs('core.interaction')); + describe('point mode', function() { beforeEach(function() { this.chart = window.acquireChart({