mirror of
https://github.com/chartjs/Chart.js.git
synced 2025-12-08 20:36:08 +00:00
Add stroke lines option around ticks to improve readability (#6787)
Enable stroking of text on of axis labels
This commit is contained in:
parent
f1677b6652
commit
b1421c6ea1
@ -45,9 +45,11 @@ The tick configuration is nested under the scale configuration in the `ticks` ke
|
||||
| `fontStyle` | `string` | `'normal'` | Font style for the tick labels, follows CSS font-style options (i.e. normal, italic, oblique, initial, inherit).
|
||||
| `lineHeight` | <code>number|string</code> | `1.2` | Height of an individual line of text (see [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/line-height)).
|
||||
| `reverse` | `boolean` | `false` | Reverses order of tick labels.
|
||||
| `lineWidth` | `number` | `0` | Stroke width around the text.
|
||||
| `minor` | `object` | `{}` | Minor ticks configuration. Omitted options are inherited from options above.
|
||||
| `major` | `object` | `{}` | Major ticks configuration. Omitted options are inherited from options above.
|
||||
| `padding` | `number` | `0` | Sets the offset of the tick labels from the axis
|
||||
| `strokeStyle` | `string` | `` | The color of the stroke around the text.
|
||||
| `z` | `number` | `0` | z-index of tick layer. Useful when ticks are drawn on chart area. Values <= 0 are drawn under datasets, > 0 on top.
|
||||
|
||||
## Minor Tick Configuration
|
||||
|
||||
@ -52,6 +52,8 @@ defaults._set('scale', {
|
||||
minRotation: 0,
|
||||
maxRotation: 50,
|
||||
mirror: false,
|
||||
lineWidth: 0,
|
||||
strokeStyle: '',
|
||||
padding: 0,
|
||||
display: true,
|
||||
autoSkip: true,
|
||||
@ -140,7 +142,9 @@ function parseFontOptions(options, nestedOpts) {
|
||||
fontStyle: valueOrDefault(nestedOpts.fontStyle, options.fontStyle),
|
||||
lineHeight: valueOrDefault(nestedOpts.lineHeight, options.lineHeight)
|
||||
}), {
|
||||
color: resolve([nestedOpts.fontColor, options.fontColor, defaults.fontColor])
|
||||
color: resolve([nestedOpts.fontColor, options.fontColor, defaults.fontColor]),
|
||||
lineWidth: valueOrDefault(nestedOpts.lineWidth, options.lineWidth),
|
||||
strokeStyle: valueOrDefault(nestedOpts.strokeStyle, options.strokeStyle)
|
||||
});
|
||||
}
|
||||
|
||||
@ -1272,6 +1276,7 @@ class Scale extends Element {
|
||||
for (i = 0, ilen = items.length; i < ilen; ++i) {
|
||||
const item = items[i];
|
||||
const tickFont = item.font;
|
||||
const useStroke = tickFont.lineWidth > 0 && tickFont.strokeStyle !== '';
|
||||
|
||||
// Make sure we draw text in the correct color and font
|
||||
ctx.save();
|
||||
@ -1282,15 +1287,26 @@ class Scale extends Element {
|
||||
ctx.textBaseline = 'middle';
|
||||
ctx.textAlign = item.textAlign;
|
||||
|
||||
if (useStroke) {
|
||||
ctx.strokeStyle = tickFont.strokeStyle;
|
||||
ctx.lineWidth = tickFont.lineWidth;
|
||||
}
|
||||
|
||||
const label = item.label;
|
||||
let y = item.textOffset;
|
||||
if (isArray(label)) {
|
||||
for (j = 0, jlen = label.length; j < jlen; ++j) {
|
||||
// We just make sure the multiline element is a string here..
|
||||
if (useStroke) {
|
||||
ctx.strokeText('' + label[j], 0, y);
|
||||
}
|
||||
ctx.fillText('' + label[j], 0, y);
|
||||
y += tickFont.lineHeight;
|
||||
}
|
||||
} else {
|
||||
if (useStroke) {
|
||||
ctx.strokeText(label, 0, y);
|
||||
}
|
||||
ctx.fillText(label, 0, y);
|
||||
}
|
||||
ctx.restore();
|
||||
|
||||
@ -94,6 +94,7 @@ Context.prototype._initMethods = function() {
|
||||
fill: function() {},
|
||||
fillRect: function() {},
|
||||
fillText: function() {},
|
||||
strokeText: function() {},
|
||||
lineTo: function() {},
|
||||
measureText: function(text) {
|
||||
// return the number of characters * fixed size
|
||||
|
||||
@ -48,6 +48,8 @@ describe('Category scale tests', function() {
|
||||
labelOffset: 0,
|
||||
minor: {},
|
||||
major: {},
|
||||
lineWidth: 0,
|
||||
strokeStyle: '',
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -41,6 +41,8 @@ describe('Linear Scale', function() {
|
||||
labelOffset: 0,
|
||||
minor: {},
|
||||
major: {},
|
||||
lineWidth: 0,
|
||||
strokeStyle: '',
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -40,6 +40,8 @@ describe('Logarithmic Scale tests', function() {
|
||||
autoSkipPadding: 0,
|
||||
labelOffset: 0,
|
||||
minor: {},
|
||||
lineWidth: 0,
|
||||
strokeStyle: '',
|
||||
major: {
|
||||
enabled: true
|
||||
},
|
||||
|
||||
@ -63,6 +63,8 @@ describe('Test the radial linear scale', function() {
|
||||
labelOffset: 0,
|
||||
minor: {},
|
||||
major: {},
|
||||
lineWidth: 0,
|
||||
strokeStyle: '',
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@ -94,6 +94,8 @@ describe('Time scale tests', function() {
|
||||
major: {
|
||||
enabled: false
|
||||
},
|
||||
lineWidth: 0,
|
||||
strokeStyle: '',
|
||||
},
|
||||
time: {
|
||||
parser: false,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user