Skip to content

Commit

Permalink
Don't draw points outside chartArea (#9443)
Browse files Browse the repository at this point in the history
  • Loading branch information
kurkle committed Jul 20, 2021
1 parent bc7c58d commit 566d722
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 4 deletions.
6 changes: 3 additions & 3 deletions src/elements/element.point.js
@@ -1,5 +1,5 @@
import Element from '../core/core.element';
import {drawPoint} from '../helpers/helpers.canvas';
import {drawPoint, _isPointInArea} from '../helpers/helpers.canvas';

function inRange(el, pos, axis, useFinalPosition) {
const options = el.options;
Expand Down Expand Up @@ -50,11 +50,11 @@ export default class PointElement extends Element {
return (radius + borderWidth) * 2;
}

draw(ctx) {
draw(ctx, area) {
const me = this;
const options = me.options;

if (me.skip || options.radius < 0.1) {
if (me.skip || options.radius < 0.1 || !_isPointInArea(me, area, me.size(options) / 2)) {
return;
}

Expand Down
2 changes: 1 addition & 1 deletion src/helpers/helpers.canvas.js
Expand Up @@ -251,7 +251,7 @@ export function drawPoint(ctx, options, x, y) {
export function _isPointInArea(point, area, margin) {
margin = margin || 0.5; // margin - default is to match rounded decimals

return point && point.x > area.left - margin && point.x < area.right + margin &&
return point && area && point.x > area.left - margin && point.x < area.right + margin &&
point.y > area.top - margin && point.y < area.bottom + margin;
}

Expand Down
46 changes: 46 additions & 0 deletions test/fixtures/controller.line/clip/false.js
@@ -0,0 +1,46 @@
const data = [];
for (let x = 0.95; x < 1.15; x += 0.002) {
data.push({x, y: x});
}

for (let x = 0.95; x < 1.15; x += 0.001) {
data.push({x, y: 2.1 - x});
}

module.exports = {
config: {
type: 'scatter',
data: {
datasets: [{
clip: false,
radius: 8,
borderWidth: 0,
backgroundColor: (ctx) => ctx.type !== 'data' || ctx.raw.x < 1 || ctx.raw.x > 1.1 ? 'rgba(255,0,0,0.7)' : 'rgba(0,0,255,0.05)',
data
}]
},
options: {
plugins: false,
scales: {
x: {
min: 1,
max: 1.1
},
y: {
min: 1,
max: 1.1
},
},
layout: {
padding: 32
}
}
},
options: {
spriteText: true,
canvas: {
height: 240,
width: 320
}
}
};
Binary file added test/fixtures/controller.line/clip/false.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 566d722

Please sign in to comment.