Files
Chart.js/src/elements/element.point.js
Jukka Kurkela 6bd5ad5518 Generic registry for controllers, scales, elements and plugins (#7435)
* Generic registry for controllers, scales, elements and plugins
* Remove references to scale service
2020-07-06 17:38:04 -04:00

93 lines
2.0 KiB
JavaScript

import Element from '../core/core.element';
import {_isPointInArea, drawPoint} from '../helpers/helpers.canvas';
export default class Point extends Element {
constructor(cfg) {
super();
this.options = undefined;
this.skip = undefined;
this.stop = undefined;
if (cfg) {
Object.assign(this, cfg);
}
}
inRange(mouseX, mouseY, useFinalPosition) {
const options = this.options;
const {x, y} = this.getProps(['x', 'y'], useFinalPosition);
return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));
}
inXRange(mouseX, useFinalPosition) {
const options = this.options;
const {x} = this.getProps(['x'], useFinalPosition);
return (Math.abs(mouseX - x) < options.radius + options.hitRadius);
}
inYRange(mouseY, useFinalPosition) {
const options = this.options;
const {y} = this.getProps(['x'], useFinalPosition);
return (Math.abs(mouseY - y) < options.radius + options.hitRadius);
}
getCenterPoint(useFinalPosition) {
const {x, y} = this.getProps(['x', 'y'], useFinalPosition);
return {x, y};
}
size() {
const options = this.options || {};
const radius = Math.max(options.radius, options.hoverRadius) || 0;
const borderWidth = radius && options.borderWidth || 0;
return (radius + borderWidth) * 2;
}
draw(ctx, chartArea) {
const me = this;
const options = me.options;
if (me.skip || options.radius <= 0) {
return;
}
// Clipping for Points.
if (chartArea === undefined || _isPointInArea(me, chartArea)) {
ctx.strokeStyle = options.borderColor;
ctx.lineWidth = options.borderWidth;
ctx.fillStyle = options.backgroundColor;
drawPoint(ctx, options, me.x, me.y);
}
}
getRange() {
const options = this.options || {};
return options.radius + options.hitRadius;
}
}
Point.id = 'point';
/**
* @type {any}
*/
Point.defaults = {
borderWidth: 1,
hitRadius: 1,
hoverBorderWidth: 1,
hoverRadius: 4,
pointStyle: 'circle',
radius: 3
};
/**
* @type {any}
*/
Point.defaultRoutes = {
backgroundColor: 'color',
borderColor: 'color'
};