From 52adba72188e6474db7e4829424c56beabdf03e5 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Mon, 17 Jan 2022 20:12:55 +0200 Subject: [PATCH] Enable sub elements (#555) * Enable sub elements * Box chore * helpers chore * CC * Docs, initProperties (for animation staring point) * subElements drawn within clip * Fix clipping + modify fixture to catch * Another fixture * and another fixture * ffs --- docs/guide/types/box.md | 2 +- docs/guide/types/label.md | 3 +- docs/guide/types/line.md | 2 +- docs/guide/types/point.md | 3 +- docs/guide/types/polygon.md | 58 +++++++++++- docs/samples/polygon/basic.md | 14 +++ src/annotation.js | 100 ++++++++++++++------ src/helpers/helpers.chart.js | 40 +++++++- src/helpers/helpers.core.js | 16 ++++ src/helpers/helpers.geometric.js | 14 ++- src/types/box.js | 29 ++++-- src/types/point.js | 3 + src/types/polygon.js | 81 ++++++++-------- test/fixtures/box/label.js | 8 +- test/fixtures/box/label.png | Bin 20904 -> 24314 bytes test/fixtures/box/labelMultiline.js | 13 +-- test/fixtures/box/labelMultiline.png | Bin 28088 -> 23806 bytes test/fixtures/box/labelPadding.js | 5 - test/fixtures/box/labelPadding.png | Bin 26404 -> 24773 bytes test/fixtures/polygon/hexagonWithPoints.js | 52 ++++++++++ test/fixtures/polygon/hexagonWithPoints.png | Bin 0 -> 5181 bytes test/index.js | 2 + test/specs/helpers.spec.js | 20 ++++ 23 files changed, 356 insertions(+), 109 deletions(-) create mode 100644 test/fixtures/polygon/hexagonWithPoints.js create mode 100644 test/fixtures/polygon/hexagonWithPoints.png create mode 100644 test/specs/helpers.spec.js diff --git a/docs/guide/types/box.md b/docs/guide/types/box.md index 6d186c91f..de9981cf8 100644 --- a/docs/guide/types/box.md +++ b/docs/guide/types/box.md @@ -134,7 +134,7 @@ All of these options can be [Scriptable](../options#scriptable-options) | `xAdjust` | `number` | `0` | Adjustment along x-axis (left-right) of label relative to computed position. Negative values move the label left, positive right. | `yAdjust` | `number` | `0` | Adjustment along y-axis (top-bottom) of label relative to computed position. Negative values move the label up, positive down. -#### Position +### Position A position can be set in 2 different values types: diff --git a/docs/guide/types/label.md b/docs/guide/types/label.md index 1e3db4021..ee354140c 100644 --- a/docs/guide/types/label.md +++ b/docs/guide/types/label.md @@ -95,7 +95,6 @@ If one of the axes does not match an axis in the chart, the content will be rend The 4 coordinates, xMin, xMax, yMin, yMax are optional. If not specified, the box is expanded out to the edges in the respective direction and the box size is used to calculated the center of the point. To enable to use the box positioning, the `radius` must be set to `0` or `NaN`. - | Name | Description | ---- | ---- | `adjustScaleRange` | Should the scale range be adjusted if this annotation is out of range. @@ -155,7 +154,7 @@ If this value is a number, it is applied to all corners of the rectangle (topLef A callout connects the label by a line to the selected point. -Namespace: `options.annotations[annotationID].label.callout`, it defines options for the callout on the annotation label. +Namespace: `options.annotations[annotationID].callout`, it defines options for the callout on the annotation label. ```js chart-editor /* */ diff --git a/docs/guide/types/line.md b/docs/guide/types/line.md index b29af9113..11a1d0b53 100644 --- a/docs/guide/types/line.md +++ b/docs/guide/types/line.md @@ -158,7 +158,7 @@ All of these options can be [Scriptable](../options#scriptable-options) | `yAdjust` | `number` | `0` | Adjustment along y-axis (top-bottom) of label relative to computed position. Negative values move the label up, positive down. | `yPadding` | `number` | `6` | Padding of label to add top/bottom. This is **deprecated**. Use `padding`. -#### borderRadius +### borderRadius If this value is a number, it is applied to all corners of the rectangle (topLeft, topRight, bottomLeft, bottomRight). If this value is an object, the `topLeft` property defines the top-left corners border radius. Similarly, the `topRight`, `bottomLeft`, and `bottomRight` properties can also be specified. Omitted corners have radius of 0. diff --git a/docs/guide/types/point.md b/docs/guide/types/point.md index 467b48301..4c0c602f6 100644 --- a/docs/guide/types/point.md +++ b/docs/guide/types/point.md @@ -80,8 +80,7 @@ The following options are available for point annotations. If one of the axes does not match an axis in the chart, the point annotation will take the center of the chart as point. The 2 coordinates, xValue, yValue are optional. If not specified, the point annotation will take the center of the chart as point. -The 4 coordinates, xMin, xMax, yMin, yMax are optional. If not specified, the box is expanded out to the edges in the respective direction and the box size is used to calculated the center of the point. To enable to use the box positioning, the `radius` must be set to `0` or `NaN`. - +The 4 coordinates, xMin, xMax, yMin, yMax are optional. If not specified, the box is expanded out to the edges in the respective direction and the box size is used to calculated the center of the point. To enable to use the box positioning, the `radius` must be set to `0` or `NaN`. | Name | Description | ---- | ---- diff --git a/docs/guide/types/polygon.md b/docs/guide/types/polygon.md index f2131f0c6..adabb37c9 100644 --- a/docs/guide/types/polygon.md +++ b/docs/guide/types/polygon.md @@ -63,6 +63,7 @@ The following options are available for polygon annotations. | [`borderWidth`](#styling) | `number`| Yes | `1` | [`display`](#general) | `boolean` | Yes | `true` | [`drawTime`](#general) | `string` | Yes | `'afterDatasetsDraw'` +| [`point`](#point) | `object` | Yes | `{radius: 0}` | [`radius`](#general) | `number` | Yes | `10` | [`rotation`](#general) | `number` | Yes | `0` | [`shadowBlur`](#styling) | `number` | Yes | `0` @@ -84,7 +85,7 @@ The following options are available for polygon annotations. If one of the axes does not match an axis in the chart, the polygon annotation will take the center of the chart as point. The 2 coordinates, xValue, yValue are optional. If not specified, the polygon annotation will take the center of the chart. -The 4 coordinates, xMin, xMax, yMin, yMax are optional. If not specified, the box is expanded out to the edges in the respective direction and the box size is used to calculated the center of the point. To enable to use the box positioning, the `radius` must be set to `0` or `NaN`. +The 4 coordinates, xMin, xMax, yMin, yMax are optional. If not specified, the box is expanded out to the edges in the respective direction and the box size is used to calculated the center of the point. To enable to use the box positioning, the `radius` must be set to `0` or `NaN`. | Name | Description | ---- | ---- @@ -121,3 +122,58 @@ The 4 coordinates, xMin, xMax, yMin, yMax are optional. If not specified, the bo | `shadowBlur` | The amount of blur applied to shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowBlur). | `shadowOffsetX` | The distance that shadow will be offset horizontally. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetX). | `shadowOffsetY` | The distance that shadow will be offset vertically. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetY). + +### Point + +Polygon consists of points. These points are actually [Point Annotations](point) and all of the [styling options](point#styling) can be configured. General options affecting the location of the point are ignored. + +Namespace: `options.annotations[annotationID].point`, it defines options for the callout on the annotation label. + +```js chart-editor +/* */ +const options = { + plugins: { + autocolors: false, + annotation: { + annotations: { + pentagon: { + type: 'polygon', + xValue: 1, + yValue: 60, + sides: 4, + radius: 60, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + point: { + radius: 10, + borderWidth: 2, + borderColor: '#666', + backgroundColor: 'rgba(99, 132, 255, 0.25)', + } + } + } + } + } +}; +/* */ + +/* */ +const config = { + type: 'line', + data: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + datasets: [{ + label: 'My First Dataset', + data: [65, 59, 80, 81, 56, 55, 40], + fill: false, + borderColor: 'rgb(75, 192, 192)', + tension: 0.1 + }] + }, + options +}; +/* */ + +module.exports = { + config +}; +``` diff --git a/docs/samples/polygon/basic.md b/docs/samples/polygon/basic.md index 837de2403..7ac8b92dd 100644 --- a/docs/samples/polygon/basic.md +++ b/docs/samples/polygon/basic.md @@ -123,6 +123,20 @@ const actions = [ }); chart.update(); } + }, + { + name: 'Add a side to annotation 1', + handler: function(chart) { + chart.options.plugins.annotation.annotations.annotation1.sides++; + chart.update(); + } + }, + { + name: 'Remove a side from annotation 1', + handler: function(chart) { + chart.options.plugins.annotation.annotations.annotation1.sides--; + chart.update(); + } } ]; diff --git a/src/annotation.js b/src/annotation.js index f6ba575e7..3861b1b91 100644 --- a/src/annotation.js +++ b/src/annotation.js @@ -3,28 +3,22 @@ import {clipArea, unclipArea, isObject, isArray} from 'chart.js/helpers'; import {handleEvent, hooks, updateListeners} from './events'; import {adjustScaleRange, verifyScaleOptions} from './scale'; import {annotationTypes} from './types'; +import {requireVersion} from './helpers'; import {version} from '../package.json'; const chartStates = new Map(); -const versionParts = Chart.version.split('.'); export default { id: 'annotation', version, + beforeRegister() { + requireVersion('chart.js', '3.7', Chart.version); + }, + afterRegister() { Chart.register(annotationTypes); - - // TODO: Remove this workaround when strictly requiring Chart.js v3.7 or newer - if (versionParts[0] === '3' && parseInt(versionParts[1], 10) <= 6) { - // Workaround for https://github.com/chartjs/chartjs-plugin-annotation/issues/572 - Chart.defaults.set('elements.lineAnnotation', { - callout: {}, - font: {}, - padding: 6 - }); - } }, afterUnregister() { @@ -155,18 +149,49 @@ function updateElements(chart, state, options, mode) { const elements = resyncElements(state.elements, annotations); for (let i = 0; i < annotations.length; i++) { - const annotation = annotations[i]; - let el = elements[i]; - const elementClass = annotationTypes[resolveType(annotation.type)]; - if (!el || !(el instanceof elementClass)) { - el = elements[i] = new elementClass(); - } - const opts = resolveAnnotationOptions(annotation.setContext(getContext(chart, el, annotation))); - const properties = el.resolveElementProperties(chart, opts); + const annotationOptions = annotations[i]; + const element = getOrCreateElement(elements, i, annotationOptions.type); + const resolver = annotationOptions.setContext(getContext(chart, element, annotationOptions)); + const resolvedOptions = resolveAnnotationOptions(resolver); + const properties = element.resolveElementProperties(chart, resolvedOptions); + properties.skip = isNaN(properties.x) || isNaN(properties.y); - properties.options = opts; - animations.update(el, properties); + properties.options = resolvedOptions; + + if ('elements' in properties) { + updateSubElements(element, properties, resolver, animations); + // Remove the sub-element definitions from properties, so the actual elements + // are not overwritten by their definitions + delete properties.elements; + } + + animations.update(element, properties); + } +} + +function updateSubElements(mainElement, {elements, initProperties}, resolver, animations) { + const subElements = mainElement.elements || (mainElement.elements = []); + subElements.length = elements.length; + for (let i = 0; i < elements.length; i++) { + const definition = elements[i]; + const properties = definition.properties; + const subElement = getOrCreateElement(subElements, i, definition.type, initProperties); + const subResolver = resolver[definition.optionScope].override(definition); + properties.options = resolveAnnotationOptions(subResolver); + animations.update(subElement, properties); + } +} + +function getOrCreateElement(elements, index, type, initProperties) { + const elementClass = annotationTypes[resolveType(type)]; + let element = elements[index]; + if (!element || !(element instanceof elementClass)) { + element = elements[index] = new elementClass(); + if (isObject(initProperties)) { + Object.assign(element, initProperties); + } } + return element; } function resolveAnnotationOptions(resolver) { @@ -175,7 +200,9 @@ function resolveAnnotationOptions(resolver) { result.id = resolver.id; result.type = resolver.type; result.drawTime = resolver.drawTime; - Object.assign(result, resolveObj(resolver, elementClass.defaults), resolveObj(resolver, elementClass.defaultRoutes)); + Object.assign(result, + resolveObj(resolver, elementClass.defaults), + resolveObj(resolver, elementClass.defaultRoutes)); for (const hook of hooks) { result[hook] = resolver[hook]; } @@ -215,21 +242,20 @@ function resyncElements(elements, annotations) { function draw(chart, caller, clip) { const {ctx, chartArea} = chart; - const state = chartStates.get(chart); + const {visibleElements} = chartStates.get(chart); if (clip) { clipArea(ctx, chartArea); } - state.visibleElements.forEach(el => { - if (el.options.drawTime === caller) { - el.draw(ctx); - } - }); + + drawElements(ctx, visibleElements, caller); + drawSubElements(ctx, visibleElements, caller); + if (clip) { unclipArea(ctx); } - state.visibleElements.forEach(el => { + visibleElements.forEach(el => { if (!('drawLabel' in el)) { return; } @@ -239,3 +265,19 @@ function draw(chart, caller, clip) { } }); } + +function drawElements(ctx, elements, caller) { + for (const el of elements) { + if (el.options.drawTime === caller) { + el.draw(ctx); + } + } +} + +function drawSubElements(ctx, elements, caller) { + for (const el of elements) { + if (isArray(el.elements)) { + drawElements(ctx, el.elements, caller); + } + } +} diff --git a/src/helpers/helpers.chart.js b/src/helpers/helpers.chart.js index e38585a79..059c2e933 100644 --- a/src/helpers/helpers.chart.js +++ b/src/helpers/helpers.chart.js @@ -2,11 +2,30 @@ import {isFinite} from 'chart.js/helpers'; import {getRectCenterPoint} from './helpers.geometric'; import {isBoundToPoint} from './helpers.options'; +/** + * @typedef { import("chart.js").Chart } Chart + * @typedef { import("chart.js").Scale } Scale + * @typedef { import("chart.js").Point } Point + * @typedef { import('../../types/options').CoreAnnotationOptions } CoreAnnotationOptions + * @typedef { import('../../types/options').PointAnnotationOptions } PointAnnotationOptions + */ + +/** + * @param {Scale} scale + * @param {number|string} value + * @param {number} fallback + * @returns {number} + */ export function scaleValue(scale, value, fallback) { value = typeof value === 'number' ? value : scale.parse(value); return isFinite(value) ? scale.getPixelForValue(value) : fallback; } +/** + * @param {Scale} scale + * @param {{start: number, end: number}} options + * @returns {{start: number, end: number}} + */ function getChartDimensionByScale(scale, options) { if (scale) { const min = scaleValue(scale, options.min, options.start); @@ -22,6 +41,11 @@ function getChartDimensionByScale(scale, options) { }; } +/** + * @param {Chart} chart + * @param {CoreAnnotationOptions} options + * @returns {Point} + */ export function getChartPoint(chart, options) { const {chartArea, scales} = chart; const xScale = scales[options.xScaleID]; @@ -39,13 +63,18 @@ export function getChartPoint(chart, options) { return {x, y}; } +/** + * @param {Chart} chart + * @param {CoreAnnotationOptions} options + * @returns {{x?:number, y?: number, x2?: number, y2?: number, width?: number, height?: number}} + */ export function getChartRect(chart, options) { const xScale = chart.scales[options.xScaleID]; const yScale = chart.scales[options.yScaleID]; let {top: y, left: x, bottom: y2, right: x2} = chart.chartArea; if (!xScale && !yScale) { - return {options: {}}; + return {}; } const xDim = getChartDimensionByScale(xScale, {min: options.xMin, max: options.xMax, start: x, end: x2}); @@ -65,6 +94,10 @@ export function getChartRect(chart, options) { }; } +/** + * @param {Chart} chart + * @param {PointAnnotationOptions} options + */ export function getChartCircle(chart, options) { const point = getChartPoint(chart, options); return { @@ -75,6 +108,11 @@ export function getChartCircle(chart, options) { }; } +/** + * @param {Chart} chart + * @param {PointAnnotationOptions} options + * @returns + */ export function resolvePointPosition(chart, options) { if (!isBoundToPoint(options)) { const box = getChartRect(chart, options); diff --git a/src/helpers/helpers.core.js b/src/helpers/helpers.core.js index f9348ccd3..ac77c1f2e 100644 --- a/src/helpers/helpers.core.js +++ b/src/helpers/helpers.core.js @@ -27,3 +27,19 @@ export function getElementCenterPoint(element, useFinalPosition) { const {x, y} = element.getProps(['x', 'y'], useFinalPosition); return {x, y}; } + +const isOlderPart = (act, req) => req > act || (act.length > req.length && act.substr(0, req.length) === req); + +export function requireVersion(pkg, min, ver) { + const parts = ver.split('.'); + let i = 0; + for (const req of min.split('.')) { + const act = parts[i++]; + if (parseInt(req, 10) < parseInt(act, 10)) { + break; + } + if (isOlderPart(act, req)) { + throw new Error(`${pkg} v${ver} is not supported. v${min} or newer is required.`); + } + } +} diff --git a/src/helpers/helpers.geometric.js b/src/helpers/helpers.geometric.js index 06b933a57..bb133292e 100644 --- a/src/helpers/helpers.geometric.js +++ b/src/helpers/helpers.geometric.js @@ -1,3 +1,11 @@ +/** + * @typedef {import('chart.js').Point} Point + */ + +/** + * @param {{x: number, y: number, width: number, height: number}} rect + * @returns {Point} + */ export function getRectCenterPoint(rect) { const {x, y, width, height} = rect; return { @@ -8,10 +16,10 @@ export function getRectCenterPoint(rect) { /** * Rotate a `point` relative to `center` point by `angle` - * @param {{x: number, y: number}} point - the point to rotate - * @param {{x: number, y: number}} center - center point for rotation + * @param {Point} point - the point to rotate + * @param {Point} center - center point for rotation * @param {number} angle - angle for rotation, in radians - * @returns {{x: number, y: number}} rotated point + * @returns {Point} rotated point */ export function rotated(point, center, angle) { var cos = Math.cos(angle); diff --git a/src/types/box.js b/src/types/box.js index 6f6776a74..319927645 100644 --- a/src/types/box.js +++ b/src/types/box.js @@ -19,22 +19,24 @@ export default class BoxAnnotation extends Element { drawLabel(ctx) { const {x, y, width, height, options} = this; - const labelOpts = options.label; - labelOpts.borderWidth = options.borderWidth; - ctx.save(); - ctx.beginPath(); - ctx.rect(x + labelOpts.borderWidth / 2, y + labelOpts.borderWidth / 2, width - labelOpts.borderWidth, height - labelOpts.borderWidth); - ctx.clip(); - const position = toPosition(labelOpts.position); - const padding = toPadding(labelOpts.padding); - const labelSize = measureLabelSize(ctx, labelOpts); + const {label, borderWidth} = options; + const halfBorder = borderWidth / 2; + const position = toPosition(label.position); + const padding = toPadding(label.padding); + const labelSize = measureLabelSize(ctx, label); const labelRect = { x: calculateX(this, labelSize, position, padding), y: calculateY(this, labelSize, position, padding), width: labelSize.width, height: labelSize.height }; - drawLabel(ctx, labelRect, labelOpts); + + ctx.save(); + ctx.beginPath(); + ctx.rect(x + halfBorder + padding.left, y + halfBorder + padding.top, + width - borderWidth - padding.width, height - borderWidth - padding.height); + ctx.clip(); + drawLabel(ctx, labelRect, label); ctx.restore(); } @@ -58,6 +60,7 @@ BoxAnnotation.defaults = { cornerRadius: undefined, // TODO: v2 remove support for cornerRadius display: true, label: { + borderWidth: undefined, color: 'black', content: null, drawTime: undefined, @@ -93,6 +96,12 @@ BoxAnnotation.defaultRoutes = { backgroundColor: 'color' }; +BoxAnnotation.descriptors = { + label: { + _fallback: true + } +}; + function calculateX(box, labelSize, position, padding) { const {x: start, x2: end, width: size, options} = box; const {xAdjust: adjust, borderWidth} = options.label; diff --git a/src/types/point.js b/src/types/point.js index e6377bf88..4eb7d8250 100644 --- a/src/types/point.js +++ b/src/types/point.js @@ -16,6 +16,9 @@ export default class PointAnnotation extends Element { draw(ctx) { const options = this.options; const borderWidth = options.borderWidth; + if (options.radius < 0.1) { + return; + } ctx.save(); ctx.fillStyle = options.backgroundColor; setShadowStyle(ctx, options); diff --git a/src/types/polygon.js b/src/types/polygon.js index 7c42fb71f..d2c528a66 100644 --- a/src/types/polygon.js +++ b/src/types/polygon.js @@ -1,12 +1,10 @@ import {Element} from 'chart.js'; -import {PI, RAD_PER_DEG, isNumber} from 'chart.js/helpers'; +import {PI, RAD_PER_DEG} from 'chart.js/helpers'; import {setBorderStyle, resolvePointPosition, getElementCenterPoint, setShadowStyle} from '../helpers'; export default class PolygonAnnotation extends Element { - inRange(mouseX, mouseY, useFinalPosition) { - const vertices = getVertices(this.getProps(['x', 'y'], useFinalPosition), this.options, true); - return vertices && vertices.length > 0 && pointIsInPolygon(vertices, mouseX, mouseY); + return this.elements.length > 1 && pointIsInPolygon(this.elements, mouseX, mouseY, useFinalPosition); } getCenterPoint(useFinalPosition) { @@ -14,18 +12,20 @@ export default class PolygonAnnotation extends Element { } draw(ctx) { - const {x, y, options} = this; - const vertices = getVertices({x, y}, options); - let vertex = vertices[0]; + const {elements, options} = this; ctx.save(); ctx.beginPath(); ctx.fillStyle = options.backgroundColor; setShadowStyle(ctx, options); const stroke = setBorderStyle(ctx, options); - ctx.moveTo(vertex.x, vertex.y); - for (let i = 1; i < vertices.length; i++) { - vertex = vertices[i]; - ctx.lineTo(vertex.x, vertex.y); + let first = true; + for (const el of elements) { + if (first) { + ctx.moveTo(el.x, el.y); + first = false; + } else { + ctx.lineTo(el.x, el.y); + } } ctx.closePath(); ctx.fill(); @@ -38,12 +38,28 @@ export default class PolygonAnnotation extends Element { } resolveElementProperties(chart, options) { - if (isNumber(options.sides) && options.sides >= 1) { - return resolvePointPosition(chart, options); + const {x, y, width, height} = resolvePointPosition(chart, options); + const {sides, radius, rotation, borderWidth} = options; + const halfBorder = borderWidth / 2; + const elements = []; + const angle = (2 * PI) / sides; + let rad = rotation * RAD_PER_DEG; + for (let i = 0; i < sides; i++, rad += angle) { + const sin = Math.sin(rad); + const cos = Math.cos(rad); + elements.push({ + type: 'point', + optionScope: 'point', + properties: { + x: x + sin * radius, + y: y - cos * radius, + bX: x + sin * (radius + halfBorder), + bY: y - cos * (radius + halfBorder) + } + }); } - return {options: {}}; + return {x, y, width, height, elements, initProperties: {x, y}}; } - } PolygonAnnotation.id = 'polygonAnnotation'; @@ -58,6 +74,9 @@ PolygonAnnotation.defaults = { borderShadowColor: 'transparent', borderWidth: 1, display: true, + point: { + radius: 0 + }, radius: 10, rotation: 0, shadowBlur: 0, @@ -81,36 +100,16 @@ PolygonAnnotation.defaultRoutes = { backgroundColor: 'color' }; -function getVertices(point, options, useBorderWidth = false) { - const {sides, radius} = options; - const hBorderWidth = useBorderWidth ? options.borderWidth / 2 || 0 : 0; - let angle = (2 * PI) / sides; - let rad = options.rotation * RAD_PER_DEG; - const vertices = new Array(); - addVertex(vertices, point, rad, radius + hBorderWidth); - for (let i = 0; i < sides; i++) { - rad += angle; - addVertex(vertices, point, rad, radius + hBorderWidth); - } - return vertices; -} - -function addVertex(array, point, rad, radius) { - array.push({ - x: point.x + Math.sin(rad) * radius, - y: point.y - Math.cos(rad) * radius - }); -} -function pointIsInPolygon(vertices, x, y) { +function pointIsInPolygon(points, x, y, useFinalPosition) { let isInside = false; - let i = 0; - let j = vertices.length - 1; - for (i, j; i < vertices.length; j = i++) { - if ((vertices[i].y > y) !== (vertices[j].y > y) && - x < (vertices[j].x - vertices[i].x) * (y - vertices[i].y) / (vertices[j].y - vertices[i].y) + vertices[i].x) { + let A = points[points.length - 1].getProps(['bX', 'bY'], useFinalPosition); + for (const point of points) { + const B = point.getProps(['bX', 'bY'], useFinalPosition); + if ((B.bY > y) !== (A.bY > y) && x < (A.bX - B.bX) * (y - B.bY) / (A.bY - B.bY) + B.bX) { isInside = !isInside; } + A = B; } return isInside; } diff --git a/test/fixtures/box/label.js b/test/fixtures/box/label.js index 12ea0fee7..612d2d1a2 100644 --- a/test/fixtures/box/label.js +++ b/test/fixtures/box/label.js @@ -38,12 +38,12 @@ module.exports = { yMin: 11, yMax: 15, backgroundColor: 'rgba(255, 99, 132, 0.5)', - borderColor: 'rgba(255, 99, 132)', - borderDash: [6, 6], - borderWidth: 5, + borderColor: 'black', + borderWidth: 15, label: { enabled: true, - content: 'This is a label', + borderColor: 'green', + content: 'This label tests clipping', position: 'start' } }, diff --git a/test/fixtures/box/label.png b/test/fixtures/box/label.png index c3ca1ad5f12bb55b21328afe27c145d8474d53d4..7408bbf869e49f95e03e668bb10c3bdb860e256c 100644 GIT binary patch literal 24314 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�u%Jm}u+?2#u& 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 Pb9CgO`hmE8M%Vrae7G@t literal 28088 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 Iy-z&rzb<>zU;qFB diff --git a/test/fixtures/box/labelPadding.js b/test/fixtures/box/labelPadding.js index 9557da510..393f1280a 100644 --- a/test/fixtures/box/labelPadding.js +++ b/test/fixtures/box/labelPadding.js @@ -1,5 +1,4 @@ module.exports = { - tolerance: 0.0075, config: { type: 'bar', options: { @@ -24,7 +23,6 @@ module.exports = { yMax: 10, backgroundColor: 'rgba(255, 99, 132, 0.5)', borderColor: 'rgba(255, 99, 132)', - borderDash: [6, 6], borderWidth: 5, label: { enabled: true, @@ -41,7 +39,6 @@ module.exports = { yMax: 15, backgroundColor: 'rgba(255, 99, 132, 0.5)', borderColor: 'rgba(255, 99, 132)', - borderDash: [6, 6], borderWidth: 5, label: { enabled: true, @@ -58,7 +55,6 @@ module.exports = { yMax: 20, backgroundColor: 'rgba(255, 99, 132, 0.5)', borderColor: 'rgba(255, 99, 132)', - borderDash: [6, 6], borderWidth: 5, label: { enabled: true, @@ -75,7 +71,6 @@ module.exports = { yMax: 9, backgroundColor: 'rgba(255, 99, 132, 0.5)', borderColor: 'rgba(255, 99, 132)', - borderDash: [6, 6], borderWidth: 5, label: { enabled: true, diff --git a/test/fixtures/box/labelPadding.png b/test/fixtures/box/labelPadding.png index 7e05bb12513aa760670b473a965c1107f5559f96..b7bb450f25bcdaf309592a128c5ef91086f85556 100644 GIT binary patch literal 24773 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%0A)6wYClyAZ=%4doHsM&N8Oh$ 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%0AgHlz6p+eC2pu{ z8kqm|gI}WyP(uIo_;~b$cI~I{JIF?I^z3u+pnR6>MxIZxoON6=F5-NdQhDK%naq>M zi}4HfX{E1?kBkQI&NkKv4+Y#a-!WueYzZvCIi^~_cNZ)PIS0Z7;Gp-IWSee1wT`{= zZtn+cmAH4d1~_WV10SE>$gDeptn#)5!mHb~`i4L8>FZ+~AzhRn7aF1ZTdH^bUkSL3 zYi=BX8yR_R?U8qBuAd?Pvq4wpfv4G%tMK_Q+i)TnWr_n%Ua*-T&)l7tfR+zTYq~on z_8!IFe?imp^u%$`L$PbW#Z>%2rM0pr24F2iL7ByPfC{MtK^DL}{}g0(gxUO(V_9TR z27e5oLA%wy%#{7cT}y|Fl<-}?PLg0T<(a_%v}USDSy zkk?jKcss3INUX*D#A8N0m#a|Tyc-_kRfh+AcswRi`FgywIuR!Lyj;|L<<-=t<@hcT zki@;9pc8Bm<0$D>$7iO#mLDlGoW+Ja0qnEm^FN2AvqO(yq<{Bw`gh^r9%SKmzx9fU z!F|OHYvmkjw8La$I)H+h483=z@%3j_zK3?tS&uuxCnOJk1Q!EzYRGdbXkbSrP-{Wj@8Y1jP-HCaV&OE|oVo9bUw| zpg^V77)d6|6cggxy}99Clfw)V@K{TydL2`$>d-+h1ImQi!CQGf@SfpVQcr3w&q zEJQ>p#`3dTG5V}^2!&^?3T#MV75S!T1=0_D6u8obXWlS%NbG&zu|6#6H&OuDxH2t| z>75>v@@^TrY2WSb$>79R=nkeh9;P~EU$IzPSl4B*|g z=_vghD1dc#${_s?i74ESk5ggJ01TeW+V?vt!h%|h1KO=GH_ghyH+wdR>=R1|t#gWj zs4L@ee^wF?xbnN5Vrz=!z+&(3fB4Zzhi#JBEIf(*(ammR0Yw=&wun_cKG>PH@B%*M z3RG&72dmLFX;>9W@iN(K-#o|mj0CR}MO&I*Jw4tk29pPyi#EQ#6t|NHph+u$i7C+* z(=h}sPXcHe2$6Cd2pCC%Rr$*26IddOLe$c+7RJsK`gT7R;u~}t*LZ4GgV|H)??bl= zcM~&>YRaE%ekv1k*Q{wBfS;<<|GgIp;Aq6rqk-0sp8)33sk2N}@E8>s16^Zy{#AiD z_>Zq{l(UHMuhhA#3Ii+;%a)THW&;BTQ?o!o_tvY#SX_jzK2>9p zsCTn?>mXAdHfG{S(L?F8T~{fY^y8-Z7ElVAGp*IaDbrA!1J@UU1Zd!BvCsPYhYLn- zmnjcyatmc*ZSp^^di#Tw<~S4uXk9K5eO;Vq(1N=;)8lW3!wy)Wpg2fCE*EIIG!S{11P``Fpxbd5s!G7t;B<^p zt&BNO@Y%-j{C3|c1W_C(w&E<5DOlG>gSLj7rRM+GvPUiG;{jII0e~t9 zX82d4-ac3*yU;*?x6t#)l_1Aj<@*J~Ny|*OBC~E-?|G+_`TDi_+q?|r1h?kM3Yd~;2 z(-AYc5&-;!>qb8Clkxy&L{igTqaNP|mk(#g*Jpt?!l@w08A$%*iM-yb%zNt~fG|l@9(1z7jamlu>`;$>Ozm>H^9~h|)yc{m&lNu53LkERhh}4bK z;)@*pPyy_YPTrzWBR+cvFohj{mHAhNh9B4Ec25G1rvp0|d%EkIsO_Eb%U#GE!yORr zjr&|mzj2ixd&h1#IW_`FrmdPa3{A0`9T31Nfz7HhI+y8W{YxEl_L`zx*_gK{{r*O5 z;%+ZywOvkU>$0U6gR58i@(pcX*ad^fQVG5>fGk?$2r_r>O~@Lx|D(WxDaj23)@cJw zd`qe3nTFqiAEm^bQov{IA4^(7Y;JCEv@nVDhuAO`Zl2MakvgGCi1hF83j5!x3-sOTI5 z@vDR0=42wZ>(Zk(6DYQ2iKGNLM-TM|4h8kBzvIa)9*^vzCr9$Bv82#%JVCsRg>}(~ z5oy&bAdz$TX&we!>G|{gL4j9kF_l1D#-&oFBXk6-m=u-e?8mjZ+`U#V8xR%C&z`PS zqo;?>jTWpc6@qZ*s`R}dBamBI)u9qDS)sii#RT&c8G0l)fAE4I8!${N4LGU87|p8m z8H%_Vf8LS~krcy7r53yk;3J{1a-v?<^c826(CgNtmMi^^(MwFpzPf&>5=B9vTb)ul za(5399HLgnfyIMz>~%>huog%zH9bRo^Q##f*kF68b*rnW;?4e=1DDbEihd){>FMVA zje8`P*YetM=exhPHiWAu(xAgs-bdTAuNJjbiD4u}E60b@HwT0_M^5}2$z1;1a;6Ny zeQQX3>BCUmd)_~_0F$dP3`a;6>Ev8AI2R+ki^~OD0dp6F&oL%gSNGHa3TW*h46N?W zF-v)&w>=pqBN~%`Tu*40K{8zKLkSLcLYf-udY%0|hT_9OX_`-`k1riq$SX6dHp{ZR z^#V3m@qp`FB)G0Iqvx_I0BUrJ94SP^XnhYb#C3{PYciGvlIFw3 zaY{AL8U@xNR3}mOnhcbEYrFImBlCJXdmeLNqRZpb&8aGZBcZaFAe57oNE;&vYpJ7sdBC~IAW7@bp_}S*s z=Bsjh@ylM<$F3^YFnE41bT>1xV3@|*77I*|fslHe528k^sz-BthMdpDj~c-uF0LE^ z$Eww6fZSx#fyk9}v7-svc&J`p82x0$24yUCpl6jHxk`ITltz1<8e} zEq9H}KJ-;dIu{&685uX45H-L+8U1iHatx>C1qiZw=-Fz?v@|tDjw}eLhL4{HIbo_* z10+^C_9C@plnb7;yx29K&kParJS;5;ASg!LN9Gl@_sNJ_t#>V^3*1hUGR7VZ-pQnJ z=Or!YvvgTl{vx<9Ed+a#ZnN*HQ!~2L4! zXX2#K?jVxIu$F@1A|B`XKi2ylhL1Lfb7r&b%$&?k8NVX@j`7yA_8oDy9Sx-PM#)nr zI{2x1`-j7BOntqd)b2xKTPZKY?3ZfUj^7A_pSZGaM-BO9WmaoHwljln5h&o}-1ni2 zmp372h0O6QcqY;D<3Pigq!M-#Tped)&UpK>KfThuo};;HJJw*Spdkq6?bq(&>>1ee6ZsVw4KPXKQOLrlH0M@y`v zQayr5;)A~e(NfBe5pCG200#0!% zu=-sa2VjHm2U=ie9X}eNV)M{PH(KE-Kko;6d}TaP;enn3NLM|_H32GI)JXisdg!Ic z(jd#7qNz>U)%#SW4;Y0p&XhVJQ@RQA@>wHIwbhPGy3(Jd9ZjU3jphY-fP}n(E&ac- zI>blB7+w-HKgM(H0AtZ;c@Gl57BsMi2-qv=&ajY_U(X+hpQ_ht7**c_T&Wo)ItTw^Z@iK3m}i-S8Vdt zAK^JHALLGQ1awt^Gm9Ha)^)gE%a{@N5PUBT2K>sIII(SxW2^um03Msm4M{07w-JvP zIG`#30rV3U`k$`YFZ?Hcm<)L1OWffdFYJW&cb@ddDSe>E7=0s$B+ zOE$w-9P&!>Qird2pv#S5t`Z3906KvBWGUVyUfUFzRbWxIm_p(SM+J7QW-E|?M43V) z4s}3Y8Oizy0=fG_I|ysfz)k`j2o2RhKN#=h=WIWN9>zRWI;-CTSH=Zu;C^uA(*um{ zFYo7o@n1Lsj?T&tr&ak{H2++X>$SRN?0+xF|F;)pWBxpokMJxx-;LgHBMY`$8G~v4 zBKuX^`ZsV3PRc5~$Chg(#}seBs1(Hs*IDqse)?)^d_B`{tR%pr_c=_}xW-<7fsD0g z%=@s4>kF^*S4HXG=${d9VdVE7+*lIy7w65*v;9MPl<-!wKysjEtW3FNP`3Lzs7{Vu zECv@TWeQ{yA5Fx5!k;`7Yf3fvTgURmI(W-OX0gpFgvs$hDONYu^gcn&BNtjo_6z|& z3O`keX1!S!0}I$#0s$1r3{q)paF@%z@H@}FyoA|Z$iaQN=yH2l)W$93sx^rCQ59XAJPCOFzEMN+1}UP=T@gp zBN^84^M@VX82gFZwVa?PN3wiWI7ij}O`cSv1mC^9RMIq2)QNM@7)whAY!Kz#JF=we z#ZY|=zg6hTS$>LzM7qO9UZxkFyEB@zVibw?DieDJLPjXtKa3fCOj|x0A%{Q+`i0SY z`YhPFldBU4HF!;YVBpc5$;??kh-degW&c}ZNxpLH36b~(&8CL`ZZ`FIb1k49`n$Q- zpH0~QZm#urbFIIdYyI7X@b5VAe=QEA@Io-wGe?mov{zMCShG&9pdr!>K9Y8*p5*o9 zpW4pmpY4mJ=-p)ocK+X0C>8>H!<4@6ffN;2FqulF{5?)$Yo6n)&3qFGMwpD;@7|-> zi?Ag~u;Y2e*{2}w0_{iLNR(*M9##26FO<&)>*e+Jesp#1!JdiE|5C)|?y^D8>~t|; zZP}`cmcx#jkLLSDKP9JuVe3jncISprbOz#+uLyod9b++HO)ARi@CkBOPU2cix1br? zQ1grQVdnb;@h3j?isN#hV0rcMkY9!*K^sKY^>&W@|6CM2A?ifGS z;@t;@?ed@uNZX%Jk4SEUItA;_ViAe#GOn*pPphYJh7O=50S3!nP#MMy3I-m>f)*xg zorZ)eE|nsW;LTnJ7P zHU={!GJ|UOChW?$x}Wd3eo8-5$t8b+iQbe+hCr|sFbYD9OCIj1c>HL%fc2N$|Hcov zU_Aphl#dfW5~lkgRJun)MLaUWZQ_r#M16dBv`Hj6V6&~uiR38&wFPl#A5gK7(FvsY z=apRcLHShTx|3D#&xsJL8?bU=I}D#HTGR$Zm|r z|DF#^o&9}XTG@rExsDw@v#5~(c=ln#k+brKt* zpn%d}g;?Nqut%(B@Gwi#i&Sb*l3C_U+)>Spkw%`SuI)mQEc7cH9}?1HngM-|>Tv zDZL*ab!}I;Re{CDgAOlk3Id==-1D{n@kBSF>WqVHMhrX6vhTGk>3#Np3`aGb*U#;A zlQxI6b?-kf2Gu+1#5Oow#{iAajQ@OstG!4GM^*0ly+deBk=O);oa^#affgqs6O zZFt67-Ul$!?LRK?iKl^4={V)Tlx|4lWdP+tdU~!SE^Acl7oFNe4}nS}cdS!#TtGBZ zvtbU9s?wm@O?=NA9<$ZJmQJ68wPH|(r7WCL9)^v`-_6`jUwuc=O7xEMJ*6++|ACa7 zlLn&LZ!ILU#O^ZVDX(s{3TISilB0J+cJp>a+A)rIg)?H)D>Z!XId@At(P!0&?arkN z_n$X(?lxUZuQ=$(ks~L=kUBLB!x!`{lh;8Pm|2nZYORi2f26zNg>eF$C0cE%1XTJE zwwmfbv(h9LYVw@VcC+%C%%;saY0Vt8d6Kiwwg<3Cg zvJwl(8fFw8sM;8i1RNZ+sCe@_byFwNmV!NxiPY9(HU7>j)=pV9g5v!xTJ5n=@hJn}d$MW`4r6CG|j6wV`_jBG; z1B$uwRva?-bxMtp#8@OOp!$HbY&gvMNY<^bk!5co*Le!TuZ+YdJ9yEt9pzn6QJJee z-1||M0)5Cj<n z*Op(pKZJ-16EQy)`q+}*hL;GAjoXA9jr0BU`n*P_1rt?RWl^d)E`k-rU-7fVuJd(f zHL-Wnz^Tgh9tAv5rl4n@#qok39gF3G*iJ`qQ#$AU3=M5tkfoe#@?EqtC!iAi%2cR*em7 z5-(IPj{*gmYu{gxW7_*KxeoJ8?|c#5z`s=DyC}WcblKBeiI@LPW-=-==s_Ylv(yAIu-aE>jDFiUd;@&b@6zHV3KU&&c|^@pR)RC6dHR#vHM z8?es0_J@U%6kq45%N;e755OLYE}#~Ozl_;$;PU1X2OYmq=1?q(U~MbY@FP1Xzx9Tp zC`zC~c+6`}z-37d-i5n{JffjtY}$8V=8MCSiqN%dxfN@^2duU$_fhL$KFIo2hS2n9 zm-H0&J!0D{Lt3aRBd~|q(x@P1qoxnLaj34qi6ia^q+eymoWOR@?TgM`QZb2&nhzoV zuggF^VHNW*s)g?w+vjrLoP_0eNDjk(W*Rwp{g@sOssvHQWqPx~hp-@~uRa}Z?#>U- zV72CCaw$zUR(Pm4nLtm0Mz~X1b4p6AciqOfvKJ`od8mKULW~1N*6oB#Ujf_t@TrrU zc2!P-j*)e3|MxUUH3bh|80uqFCZ_S-z~mA*sy#MtkRc6(DxXj= z-c?T+wL2`lMc}yIWsMjI-GN-I2u%kOvgNhC(ovh=_$^+hU4$S+Ir0AyUa zHu{M-6Fj*7cvi3Ic`lahl`IKvOt9yFFg29ciI;{SfVM_4;dj2=!+vF}ckBekq^vT+ zW`^<77Lew<2o}d%u_wDD9rh;UP$(Bj$*=99^`L>yLHTeL6uo!hX$%0ccl|qeDm_U7e$92WIBZvhTaVs=qXPVv3Yol4V&z%5wC(B zrDZG!(hlMIY`G$;!GO$xw|S+5Y!_-kjqo~60Vtr{u~F^MxDq4Z5mgN28z%WAxiD3S zzFt>X1oDM~&S7jR4qedkc(5}4VVJf6L@Y=*THA&1?&2ryz9FOvowCb8}rf$^!qxD@Q=N#CaJ+g><5-f zQArpzj=eMQ7x;y#88kIwX?oO5M7x=mmE}tE&m#vjx*>zrs<~FDM+*A3T+W^xg)BV`utjV=<*U6OsGsY^T=_Cl1S7bq34iOI=+HI-A#*8LriMfjldFx&zQyr%!nK=r@GB$WWfd%0DJP;fF$U}qD7v<;W)iHuPUKd!YWP7>b%Sq7tz zS49bHgKFYO)DbqV17L-S34j*Bnm|7u;9`@|T%9@oZ{qMjX{U^BXV7X?l7;f{p-Ju3YFJ3G(63oVUI`TliD7tI(2yADDL&mdTsU z)_vtG2+em7EZDr$_QypgOe9V9kjvv<%)9gGT(R~rXvp!X&Jk?uvic~k(W2+1qjoVM z_!DbQvHhJQ#`1}Rz>vQ84Y&MI8*fD-+mi(^W^G$1VOL+|_hvI^ZWb`3HZlc|%d?l| z55TG3%b@ng`t|LrB-*0QPZVJp9O_TIP+c(W&~{bs<(c>7m1*TOR02yiTk!C5j4Mt1 zeD`*Y5230^6q;Y=4a?Im#@S83`C?cUNE=eTW;~-_Bs&}Q`q14%? zx?p;%Nn2xJcTY)ZBtp{tDm>fZqKLC);ZBd1MAiOkn@dLm-bl8<(OqYKUHm$h3E z)G?@={V6~8^94SK#d+7N7m8@|utrMT$JlYMv-!aTrFu75|DOQc0VMv9WQH{RsIf(# zmXd+2ZiuG=T}w);^*Tq*%xX4TgSs|~YHZZSNA12bbXz0t;nS-hT^65aV=SV^PAsH+KsO%_<`u4C375z z^KT}v+iRoT8utM7^!=*iN@mj4xkXt;*{Hv0KvRv;ER3$)G`PVgN^r8S)p+%F9%)HL z7dM&#)=ZNwK4c{Oo69t90CXiSC#I=lU46^FYYp#%4N*;gudaGG!O2XfeV7Or8Pgs~po+uV$e%3#U)0=psW`d)i+y5dEdE z&ZByrzGTyE+ggoRU$WASlJ-Vu|CMHtGy|&{Dczr=zqvFu2=?VkH=7_m(N{|j`d?GM z8vJLRamGG(oUO*CE0)!gfTsMluBjcsn${dBhh8$r{_co9$?s+hcV|=ly?Nh~nGD1X zK(&;h8=Yy%Q}spn2pFjT(wo?IcI;sGzgEkozGPJ`2dIB))>Zq&s=Jou zuLl7LKmY;|fWY7ozyJ&mcit5O5P$##ATX!|{vXEQ;@VAE+{gd`002ovPDHLkV1f!M B{%8OI diff --git a/test/fixtures/polygon/hexagonWithPoints.js b/test/fixtures/polygon/hexagonWithPoints.js new file mode 100644 index 000000000..04dbf6b43 --- /dev/null +++ b/test/fixtures/polygon/hexagonWithPoints.js @@ -0,0 +1,52 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: false, + min: -10, + max: 10 + }, + y: { + display: false, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + drawTime: 'afterDraw', + annotations: { + octagon: { + type: 'polygon', + xScaleID: 'x', + yScaleID: 'y', + xValue: 1, + yValue: 1, + sides: 6, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 1, + radius: 50, + point: { + radius: 3, + backgroundColor: 'red', + borderColor: 'black', + borderWidth: 1 + } + } + } + } + } + } + }, + options: { + canvas: { + width: 256, + height: 256 + } + } +}; diff --git a/test/fixtures/polygon/hexagonWithPoints.png b/test/fixtures/polygon/hexagonWithPoints.png new file mode 100644 index 0000000000000000000000000000000000000000..97a4cddc20067180d969866d6d35216b2e54ccff GIT binary patch literal 5181 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 g requireVersion('test', '3.7', '2.9.3')).toThrowError(); + expect(() => requireVersion('test', '3.7', '3.6.99-alpha3')).toThrowError(); + expect(() => requireVersion('test', '16.13.2.8', '16.13.2.8-beta')).toThrowError(); + }); + + it('should not throw error for new enough version', function() { + expect(() => requireVersion('test', '3.7', '3.7.0-beta.1')).not.toThrowError(); + expect(() => requireVersion('test', '3.7.1', '3.7.19')).not.toThrowError(); + expect(() => requireVersion('test', '3.7', '4.0.0')).not.toThrowError(); + expect(() => requireVersion('test', '16.13.2', '16.13.3-rc')).not.toThrowError(); + }); + }); + +});