From dc4eac63233a7ba15c20fe03f8f3ac34584d134a Mon Sep 17 00:00:00 2001 From: Evert Timberg Date: Sat, 10 Oct 2020 11:38:55 -0400 Subject: [PATCH] Cartesian axis text alignment (#7846) * Generate textBaseline per tick label * Enable configuration of tick alignment * Add image based tests of text alignment options --- docs/docs/axes/styling.md | 1 + samples/samples.js | 3 + samples/scales/label-text-alignment.html | 163 ++++++++++++++++++ src/core/core.scale.js | 64 ++++++- .../fixtures/core.scale/label-align-center.js | 34 ++++ .../core.scale/label-align-center.png | Bin 0 -> 15003 bytes test/fixtures/core.scale/label-align-end.js | 34 ++++ test/fixtures/core.scale/label-align-end.png | Bin 0 -> 15000 bytes test/fixtures/core.scale/label-align-start.js | 34 ++++ .../fixtures/core.scale/label-align-start.png | Bin 0 -> 15554 bytes types/scales/index.d.ts | 5 + 11 files changed, 330 insertions(+), 8 deletions(-) create mode 100644 samples/scales/label-text-alignment.html create mode 100644 test/fixtures/core.scale/label-align-center.js create mode 100644 test/fixtures/core.scale/label-align-center.png create mode 100644 test/fixtures/core.scale/label-align-end.js create mode 100644 test/fixtures/core.scale/label-align-end.png create mode 100644 test/fixtures/core.scale/label-align-start.js create mode 100644 test/fixtures/core.scale/label-align-start.png diff --git a/docs/docs/axes/styling.md b/docs/docs/axes/styling.md index a9c8f1a0b..eed36ab4d 100644 --- a/docs/docs/axes/styling.md +++ b/docs/docs/axes/styling.md @@ -42,6 +42,7 @@ The tick configuration is nested under the scale configuration in the `ticks` ke | Name | Type | Scriptable | Default | Description | ---- | ---- | :-------------------------------: | ------- | ----------- +| `alignment` | `string` | | `'center'` | The tick alignment along the axis. Can be `'start'`, `'center'`, or `'end'`. | `callback` | `function` | | | Returns the string representation of the tick value as it should be displayed on the chart. See [callback](../axes/labelling.md#creating-custom-tick-formats). | `display` | `boolean` | | `true` | If true, show tick labels. | `font` | `Font` | Yes | `defaults.font` | See [Fonts](../general/fonts.md) diff --git a/samples/samples.js b/samples/samples.js index 67d1f4486..57cac6b3a 100644 --- a/samples/samples.js +++ b/samples/samples.js @@ -145,6 +145,9 @@ }, { title: 'Filtering Labels', path: 'scales/filtering-labels.html' + }, { + title: 'Label Text Alignment', + path: 'scales/label-text-alignment.html' }, { title: 'Non numeric Y Axis', path: 'scales/non-numeric-y.html' diff --git a/samples/scales/label-text-alignment.html b/samples/scales/label-text-alignment.html new file mode 100644 index 000000000..4e542692f --- /dev/null +++ b/samples/scales/label-text-alignment.html @@ -0,0 +1,163 @@ + + + + + Label Text Alignment + + + + + + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + + + diff --git a/src/core/core.scale.js b/src/core/core.scale.js index 2a39bd937..69a69be76 100644 --- a/src/core/core.scale.js +++ b/src/core/core.scale.js @@ -61,7 +61,8 @@ defaults.set('scale', { // We pass through arrays to be rendered as multiline labels, we convert Others to strings here. callback: Ticks.formatters.values, minor: {}, - major: {} + major: {}, + alignment: 'center', } }); @@ -761,6 +762,12 @@ export default class Scale extends Element { paddingRight = labelsBelowTicks ? sinRotation * (lastLabelSize.height - lastLabelSize.offset) : cosRotation * lastLabelSize.width + sinRotation * lastLabelSize.offset; + } else if (tickOpts.alignment === 'start') { + paddingLeft = 0; + paddingRight = lastLabelSize.width; + } else if (tickOpts.alignment === 'end') { + paddingLeft = firstLabelSize.width; + paddingRight = 0; } else { paddingLeft = firstLabelSize.width / 2; paddingRight = lastLabelSize.width / 2; @@ -780,8 +787,19 @@ export default class Scale extends Element { minSize.width = Math.min(me.maxWidth, minSize.width + labelWidth); - me.paddingTop = lastLabelSize.height / 2; - me.paddingBottom = firstLabelSize.height / 2; + let paddingTop = lastLabelSize.height / 2; + let paddingBottom = firstLabelSize.height / 2; + + if (tickOpts.alignment === 'start') { + paddingTop = 0; + paddingBottom = firstLabelSize.height; + } else if (tickOpts.alignment === 'end') { + paddingTop = lastLabelSize.height; + paddingBottom = 0; + } + + me.paddingTop = paddingTop; + me.paddingBottom = paddingBottom; } } @@ -1240,13 +1258,14 @@ export default class Scale extends Element { const rotation = -toRadians(me.labelRotation); const items = []; let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset; + let textBaseline = 'middle'; if (position === 'top') { y = me.bottom - tl - tickPadding; - textAlign = !rotation ? 'center' : 'left'; + textAlign = me._getXAxisLabelAlignment(); } else if (position === 'bottom') { y = me.top + tl + tickPadding; - textAlign = !rotation ? 'center' : 'right'; + textAlign = me._getXAxisLabelAlignment(); } else if (position === 'left') { x = me.right - (isMirrored ? 0 : tl) - tickPadding; textAlign = isMirrored ? 'left' : 'right'; @@ -1261,7 +1280,7 @@ export default class Scale extends Element { const value = position[positionAxisID]; y = me.chart.scales[positionAxisID].getPixelForValue(value) + tl + tickPadding; } - textAlign = !rotation ? 'center' : 'right'; + textAlign = me._getXAxisLabelAlignment(); } else if (axis === 'y') { if (position === 'center') { x = ((chartArea.left + chartArea.right) / 2) - tl - tickPadding; @@ -1273,6 +1292,14 @@ export default class Scale extends Element { textAlign = 'right'; } + if (axis === 'y') { + if (optionTicks.alignment === 'start') { + textBaseline = 'top'; + } else if (optionTicks.alignment === 'end') { + textBaseline = 'bottom'; + } + } + for (i = 0, ilen = ticks.length; i < ilen; ++i) { tick = ticks[i]; label = tick.label; @@ -1303,13 +1330,34 @@ export default class Scale extends Element { label, font, textOffset, - textAlign + textAlign, + textBaseline, }); } return items; } + _getXAxisLabelAlignment() { + const me = this; + const {position, ticks} = me.options; + const rotation = -toRadians(me.labelRotation); + + if (rotation) { + return position === 'top' ? 'left' : 'right'; + } + + let align = 'center'; + + if (ticks.alignment === 'start') { + align = 'left'; + } else if (ticks.alignment === 'end') { + align = 'right'; + } + + return align; + } + /** * @protected */ @@ -1409,8 +1457,8 @@ export default class Scale extends Element { ctx.rotate(item.rotation); ctx.font = tickFont.string; ctx.fillStyle = tickFont.color; - ctx.textBaseline = 'middle'; ctx.textAlign = item.textAlign; + ctx.textBaseline = item.textBaseline; if (useStroke) { ctx.strokeStyle = tickFont.strokeStyle; diff --git a/test/fixtures/core.scale/label-align-center.js b/test/fixtures/core.scale/label-align-center.js new file mode 100644 index 000000000..1e9907bf9 --- /dev/null +++ b/test/fixtures/core.scale/label-align-center.js @@ -0,0 +1,34 @@ +module.exports = { + config: { + type: 'line', + data: { + datasets: [{ + data: [1, 2, 3], + }], + labels: ['Label1', 'Label2', 'Label3'] + }, + options: { + legend: false, + title: false, + scales: { + x: { + ticks: { + alignment: 'center', + }, + }, + y: { + ticks: { + alignment: 'center', + } + } + } + } + }, + options: { + spriteText: true, + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/core.scale/label-align-center.png b/test/fixtures/core.scale/label-align-center.png new file mode 100644 index 0000000000000000000000000000000000000000..576f0254d0a2090582529f7cb63651e5c5b8a578 GIT binary patch literal 15003 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 I!tvJs16P}i%m4rY literal 0 Hc-jL100001 diff --git a/test/fixtures/core.scale/label-align-end.js b/test/fixtures/core.scale/label-align-end.js new file mode 100644 index 000000000..19a0e8ad3 --- /dev/null +++ b/test/fixtures/core.scale/label-align-end.js @@ -0,0 +1,34 @@ +module.exports = { + config: { + type: 'line', + data: { + datasets: [{ + data: [1, 2, 3], + }], + labels: ['Label1', 'Label2', 'Label3'] + }, + options: { + legend: false, + title: false, + scales: { + x: { + ticks: { + alignment: 'end', + }, + }, + y: { + ticks: { + alignment: 'end', + } + } + } + } + }, + options: { + spriteText: true, + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/core.scale/label-align-end.png b/test/fixtures/core.scale/label-align-end.png new file mode 100644 index 0000000000000000000000000000000000000000..13d72d25d35fd0ff3c07c83f6194e609c121b72e GIT binary patch literal 15000 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 literal 0 Hc-jL100001 diff --git a/test/fixtures/core.scale/label-align-start.js b/test/fixtures/core.scale/label-align-start.js new file mode 100644 index 000000000..b5284cd96 --- /dev/null +++ b/test/fixtures/core.scale/label-align-start.js @@ -0,0 +1,34 @@ +module.exports = { + config: { + type: 'line', + data: { + datasets: [{ + data: [1, 2, 3], + }], + labels: ['Label1', 'Label2', 'Label3'] + }, + options: { + legend: false, + title: false, + scales: { + x: { + ticks: { + alignment: 'start', + }, + }, + y: { + ticks: { + alignment: 'start', + } + } + } + } + }, + options: { + spriteText: true, + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/core.scale/label-align-start.png b/test/fixtures/core.scale/label-align-start.png new file mode 100644 index 0000000000000000000000000000000000000000..ad7c280f4d54db7fd6d228067ca4f9fe21c9ef36 GIT binary patch literal 15554 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 literal 0 Hc-jL100001 diff --git a/types/scales/index.d.ts b/types/scales/index.d.ts index 682116743..fe19273c6 100644 --- a/types/scales/index.d.ts +++ b/types/scales/index.d.ts @@ -128,6 +128,11 @@ export interface ICartesianScaleOptions extends ICoreScaleOptions { * @default ticks.length */ sampleSize: number; + /** + * The label alignment + * @default 'center' + */ + alignment: 'start' | 'center' | 'end'; /** * If true, automatically calculates how many labels can be shown and hides labels accordingly. Labels will be rotated up to maxRotation before skipping any. Turn autoSkip off to show all labels no matter what. * @default true -- 2.47.2