From 0edb2ac604a4a93bcddfdaefc112bf4bd73b21fa Mon Sep 17 00:00:00 2001 From: Dominic Jean Date: Thu, 1 Sep 2022 06:37:12 -0400 Subject: [PATCH] enable pointStyleWidth for all legend style (#10639) --- docs/configuration/legend.md | 2 +- src/helpers/helpers.canvas.js | 61 ++++++---- .../legend-pointStyle-width-default.json | 111 +++++++++++++++++ .../legend-pointStyle-width-default.png | Bin 0 -> 15327 bytes .../legend-pointStyle-width.json | 112 ++++++++++++++++++ .../legend-pointStyle-width.png | Bin 0 -> 17675 bytes 6 files changed, 260 insertions(+), 26 deletions(-) create mode 100644 test/fixtures/plugin.legend/pointStyle-width/legend-pointStyle-width-default.json create mode 100644 test/fixtures/plugin.legend/pointStyle-width/legend-pointStyle-width-default.png create mode 100644 test/fixtures/plugin.legend/pointStyle-width/legend-pointStyle-width.json create mode 100644 test/fixtures/plugin.legend/pointStyle-width/legend-pointStyle-width.png diff --git a/docs/configuration/legend.md b/docs/configuration/legend.md index 04045b3fd..3438c16c0 100644 --- a/docs/configuration/legend.md +++ b/docs/configuration/legend.md @@ -66,7 +66,7 @@ Namespace: `options.plugins.legend.labels` | [`pointStyle`](elements.md#point-styles) | [`pointStyle`](elements.md#types) | `'circle'` | If specified, this style of point is used for the legend. Only used if `usePointStyle` is true. | `textAlign` | `string` | `'center'` | Horizontal alignment of the label text. Options are: `'left'`, `'right'` or `'center'`. | `usePointStyle` | `boolean` | `false` | Label style will match corresponding point style (size is based on pointStyleWidth or the minimum value between boxWidth and font.size). -| `pointStyleWidth` | `number` | `null` | If `usePointStyle` is true, the width of the point style used for the legend (only for `circle`, `rect` and `line` point stlye). +| `pointStyleWidth` | `number` | `null` | If `usePointStyle` is true, the width of the point style used for the legend. | `useBorderRadius` | `boolean` | `false` | Label borderRadius will match coresponding borderRadius. | `borderRadius` | `number` | `undefined` | Override the borderRadius to use. diff --git a/src/helpers/helpers.canvas.js b/src/helpers/helpers.canvas.js index d79f6fb11..365386549 100644 --- a/src/helpers/helpers.canvas.js +++ b/src/helpers/helpers.canvas.js @@ -131,7 +131,7 @@ export function drawPoint(ctx, options, x, y) { } export function drawPointLegend(ctx, options, x, y, w) { - let type, xOffset, yOffset, size, cornerRadius, width; + let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW; const style = options.pointStyle; const rotation = options.rotation; const radius = options.radius; @@ -166,11 +166,12 @@ export function drawPointLegend(ctx, options, x, y, w) { ctx.closePath(); break; case 'triangle': - ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius); + width = w ? w / 2 : radius; + ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius); rad += TWO_THIRDS_PI; - ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius); + ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius); rad += TWO_THIRDS_PI; - ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius); + ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius); ctx.closePath(); break; case 'rectRounded': @@ -184,11 +185,13 @@ export function drawPointLegend(ctx, options, x, y, w) { cornerRadius = radius * 0.516; size = radius - cornerRadius; xOffset = Math.cos(rad + QUARTER_PI) * size; + xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size); yOffset = Math.sin(rad + QUARTER_PI) * size; - ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI); - ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad); - ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI); - ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI); + yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size); + ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI); + ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad); + ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI); + ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI); ctx.closePath(); break; case 'rect': @@ -201,39 +204,47 @@ export function drawPointLegend(ctx, options, x, y, w) { rad += QUARTER_PI; /* falls through */ case 'rectRot': + xOffsetW = Math.cos(rad) * (w ? w / 2 : radius); xOffset = Math.cos(rad) * radius; yOffset = Math.sin(rad) * radius; - ctx.moveTo(x - xOffset, y - yOffset); - ctx.lineTo(x + yOffset, y - xOffset); - ctx.lineTo(x + xOffset, y + yOffset); - ctx.lineTo(x - yOffset, y + xOffset); + yOffsetW = Math.sin(rad) * (w ? w / 2 : radius); + ctx.moveTo(x - xOffsetW, y - yOffset); + ctx.lineTo(x + yOffsetW, y - xOffset); + ctx.lineTo(x + xOffsetW, y + yOffset); + ctx.lineTo(x - yOffsetW, y + xOffset); ctx.closePath(); break; case 'crossRot': rad += QUARTER_PI; /* falls through */ case 'cross': + xOffsetW = Math.cos(rad) * (w ? w / 2 : radius); xOffset = Math.cos(rad) * radius; yOffset = Math.sin(rad) * radius; - ctx.moveTo(x - xOffset, y - yOffset); - ctx.lineTo(x + xOffset, y + yOffset); - ctx.moveTo(x + yOffset, y - xOffset); - ctx.lineTo(x - yOffset, y + xOffset); + yOffsetW = Math.sin(rad) * (w ? w / 2 : radius); + ctx.moveTo(x - xOffsetW, y - yOffset); + ctx.lineTo(x + xOffsetW, y + yOffset); + ctx.moveTo(x + yOffsetW, y - xOffset); + ctx.lineTo(x - yOffsetW, y + xOffset); break; case 'star': + xOffsetW = Math.cos(rad) * (w ? w / 2 : radius); xOffset = Math.cos(rad) * radius; yOffset = Math.sin(rad) * radius; - ctx.moveTo(x - xOffset, y - yOffset); - ctx.lineTo(x + xOffset, y + yOffset); - ctx.moveTo(x + yOffset, y - xOffset); - ctx.lineTo(x - yOffset, y + xOffset); + yOffsetW = Math.sin(rad) * (w ? w / 2 : radius); + ctx.moveTo(x - xOffsetW, y - yOffset); + ctx.lineTo(x + xOffsetW, y + yOffset); + ctx.moveTo(x + yOffsetW, y - xOffset); + ctx.lineTo(x - yOffsetW, y + xOffset); rad += QUARTER_PI; + xOffsetW = Math.cos(rad) * (w ? w / 2 : radius); xOffset = Math.cos(rad) * radius; yOffset = Math.sin(rad) * radius; - ctx.moveTo(x - xOffset, y - yOffset); - ctx.lineTo(x + xOffset, y + yOffset); - ctx.moveTo(x + yOffset, y - xOffset); - ctx.lineTo(x - yOffset, y + xOffset); + yOffsetW = Math.sin(rad) * (w ? w / 2 : radius); + ctx.moveTo(x - xOffsetW, y - yOffset); + ctx.lineTo(x + xOffsetW, y + yOffset); + ctx.moveTo(x + yOffsetW, y - xOffset); + ctx.lineTo(x - yOffsetW, y + xOffset); break; case 'line': xOffset = w ? w / 2 : Math.cos(rad) * radius; @@ -243,7 +254,7 @@ export function drawPointLegend(ctx, options, x, y, w) { break; case 'dash': ctx.moveTo(x, y); - ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius); + ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius); break; } diff --git a/test/fixtures/plugin.legend/pointStyle-width/legend-pointStyle-width-default.json b/test/fixtures/plugin.legend/pointStyle-width/legend-pointStyle-width-default.json new file mode 100644 index 000000000..ad3c2c84e --- /dev/null +++ b/test/fixtures/plugin.legend/pointStyle-width/legend-pointStyle-width-default.json @@ -0,0 +1,111 @@ + { + "config": { + "type": "line", + "data": { + "labels": ["A", "B", "C"], + "datasets": [{ + "data": [10, 10, 10], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "line" + }, + { + "data": [15, 15, 15], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "triangle" + }, + { + "data": [20, 20, 20], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "rectRounded" + }, + { + "data": [30, 30, 30], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "" + }, + { + "data": [40, 40, 40], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "rect" + }, + { + "data": [25, 25, 25], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "rectRot" + }, + { + "data": [35, 35, 35], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "crossRot" + }, + { + "data": [45, 45, 45], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "cross" + }, + { + "data": [50, 50, 50], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "star" + }, + { + "data": [55, 55, 55], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "dash" + }] + }, + "options": { + "plugins": { + "legend": { + "display": true, + "labels": { + "usePointStyle": true + } + } + }, + "scales": { + "x": { + "display": false + }, + "y": { + "display": false + } + } + } + }, + "options": { + "canvas": { + "height": 512, + "width": 1024 + } + } +} \ No newline at end of file diff --git a/test/fixtures/plugin.legend/pointStyle-width/legend-pointStyle-width-default.png b/test/fixtures/plugin.legend/pointStyle-width/legend-pointStyle-width-default.png new file mode 100644 index 0000000000000000000000000000000000000000..d646921225fd5097e6f1ba2d95f56fd440efeb3e GIT binary patch literal 15327 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 literal 0 Hc-jL100001 diff --git a/test/fixtures/plugin.legend/pointStyle-width/legend-pointStyle-width.json b/test/fixtures/plugin.legend/pointStyle-width/legend-pointStyle-width.json new file mode 100644 index 000000000..b359ca4a6 --- /dev/null +++ b/test/fixtures/plugin.legend/pointStyle-width/legend-pointStyle-width.json @@ -0,0 +1,112 @@ + { + "config": { + "type": "line", + "data": { + "labels": ["A", "B", "C"], + "datasets": [{ + "data": [10, 10, 10], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "line" + }, + { + "data": [15, 15, 15], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "triangle" + }, + { + "data": [20, 20, 20], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "rectRounded" + }, + { + "data": [30, 30, 30], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "" + }, + { + "data": [40, 40, 40], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "rect" + }, + { + "data": [25, 25, 25], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "rectRot" + }, + { + "data": [35, 35, 35], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "crossRot" + }, + { + "data": [45, 45, 45], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "cross" + }, + { + "data": [50, 50, 50], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "star" + }, + { + "data": [55, 55, 55], + "backgroundColor": "#00ff00", + "borderColor": "#ff0000", + "borderWidth": 1, + "label": "", + "pointStyle": "dash" + }] + }, + "options": { + "plugins": { + "legend": { + "display": true, + "labels": { + "usePointStyle": true, + "pointStyleWidth": 75 + } + } + }, + "scales": { + "x": { + "display": false + }, + "y": { + "display": false + } + } + } + }, + "options": { + "canvas": { + "height": 512, + "width": 1024 + } + } +} \ No newline at end of file diff --git a/test/fixtures/plugin.legend/pointStyle-width/legend-pointStyle-width.png b/test/fixtures/plugin.legend/pointStyle-width/legend-pointStyle-width.png new file mode 100644 index 0000000000000000000000000000000000000000..e28ed492c922ec8008563181b1e7d0abaa2cae07 GIT binary patch literal 17675 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 WJngCN_fUZMWqr!_WchFIfBrAo$@n7x literal 0 Hc-jL100001 -- 2.47.3