From 3e319f79ab050d456752d38e2976924c6dd1ed5e Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Sun, 18 Apr 2021 14:38:46 +0300 Subject: [PATCH] Scale: draw border on separate layer after grid (#8936) --- src/core/core.scale.js | 64 +++++++++++------- src/scales/scale.radialLinear.js | 5 ++ .../core.scale/grid/border-over-grid.js | 37 ++++++++++ .../core.scale/grid/border-over-grid.png | Bin 0 -> 14574 bytes test/fixtures/core.scale/grid/colors.js | 38 +++++++++++ test/fixtures/core.scale/grid/colors.png | Bin 0 -> 21655 bytes .../scale.category/ticks-from-data.png | Bin 11274 -> 11278 bytes test/specs/core.scale.tests.js | 35 ++-------- 8 files changed, 127 insertions(+), 52 deletions(-) create mode 100644 test/fixtures/core.scale/grid/border-over-grid.js create mode 100644 test/fixtures/core.scale/grid/border-over-grid.png create mode 100644 test/fixtures/core.scale/grid/colors.js create mode 100644 test/fixtures/core.scale/grid/colors.png diff --git a/src/core/core.scale.js b/src/core/core.scale.js index 95ff5f8b8..5b793a6f3 100644 --- a/src/core/core.scale.js +++ b/src/core/core.scale.js @@ -1009,7 +1009,7 @@ export default class Scale extends Element { const tl = getTickMarkLength(grid); const items = []; - const borderOpts = grid.setContext(me.getContext(0)); + const borderOpts = grid.setContext(me.getContext()); const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0; const axisHalfWidth = axisWidth / 2; const alignBorderValue = function(pixel) { @@ -1414,9 +1414,6 @@ export default class Scale extends Element { const me = this; const grid = me.options.grid; const ctx = me.ctx; - const chart = me.chart; - const borderOpts = grid.setContext(me.getContext()); - const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0; const items = me._gridLineItems || (me._gridLineItems = me._computeGridLineItems(chartArea)); let i, ilen; @@ -1463,27 +1460,42 @@ export default class Scale extends Element { } } } + } - if (axisWidth) { - // Draw the line at the edge of the axis - const lastLineWidth = borderOpts.lineWidth; - const borderValue = me._borderValue; - let x1, x2, y1, y2; + /** + * @protected + */ + drawBorder() { + const me = this; + const {chart, ctx, options: {grid}} = me; + const borderOpts = grid.setContext(me.getContext()); + const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0; + if (!axisWidth) { + return; + } + const lastLineWidth = grid.setContext(me.getContext(0)).lineWidth; + const borderValue = me._borderValue; + let x1, x2, y1, y2; - if (me.isHorizontal()) { - x1 = _alignPixel(chart, me.left, axisWidth) - axisWidth / 2; - x2 = _alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2; - y1 = y2 = borderValue; - } else { - y1 = _alignPixel(chart, me.top, axisWidth) - axisWidth / 2; - y2 = _alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2; - x1 = x2 = borderValue; - } - drawLine( - {x: x1, y: y1}, - {x: x2, y: y2}, - {width: axisWidth, color: borderOpts.borderColor}); + if (me.isHorizontal()) { + x1 = _alignPixel(chart, me.left, axisWidth) - axisWidth / 2; + x2 = _alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2; + y1 = y2 = borderValue; + } else { + y1 = _alignPixel(chart, me.top, axisWidth) - axisWidth / 2; + y2 = _alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2; + x1 = x2 = borderValue; } + ctx.save(); + ctx.lineWidth = borderOpts.borderWidth; + ctx.strokeStyle = borderOpts.borderColor; + + ctx.beginPath(); + ctx.moveTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.stroke(); + + ctx.restore(); } /** @@ -1571,6 +1583,7 @@ export default class Scale extends Element { me.drawBackground(); me.drawGrid(chartArea); + me.drawBorder(); me.drawTitle(); me.drawLabels(chartArea); } @@ -1585,7 +1598,7 @@ export default class Scale extends Element { const tz = opts.ticks && opts.ticks.z || 0; const gz = opts.grid && opts.grid.z || 0; - if (!me._isVisible() || tz === gz || me.draw !== Scale.prototype.draw) { + if (!me._isVisible() || me.draw !== Scale.prototype.draw) { // backward compatibility: draw has been overridden by custom scale return [{ z: tz, @@ -1602,6 +1615,11 @@ export default class Scale extends Element { me.drawGrid(chartArea); me.drawTitle(); } + }, { + z: gz + 1, // TODO, v4 move border options to its own object and add z + draw() { + me.drawBorder(); + } }, { z: tz, draw(chartArea) { diff --git a/src/scales/scale.radialLinear.js b/src/scales/scale.radialLinear.js index a12acb2b1..7be1d220c 100644 --- a/src/scales/scale.radialLinear.js +++ b/src/scales/scale.radialLinear.js @@ -506,6 +506,11 @@ export default class RadialLinearScale extends LinearScaleBase { } } + /** + * @protected + */ + drawBorder() {} + /** * @protected */ diff --git a/test/fixtures/core.scale/grid/border-over-grid.js b/test/fixtures/core.scale/grid/border-over-grid.js new file mode 100644 index 000000000..785a40456 --- /dev/null +++ b/test/fixtures/core.scale/grid/border-over-grid.js @@ -0,0 +1,37 @@ +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + position: {y: 0}, + min: -10, + max: 10, + grid: { + borderColor: 'black', + borderWidth: 5, + color: 'lightGray', + lineWidth: 3, + }, + ticks: { + display: false + }, + }, + y: { + position: {x: 0}, + min: -10, + max: 10, + grid: { + borderColor: 'black', + borderWidth: 5, + color: 'lightGray', + lineWidth: 3, + }, + ticks: { + display: false + }, + } + } + } + } +}; diff --git a/test/fixtures/core.scale/grid/border-over-grid.png b/test/fixtures/core.scale/grid/border-over-grid.png new file mode 100644 index 0000000000000000000000000000000000000000..256e5743aa7595c5c577b90293019388fb9564e3 GIT binary patch literal 14574 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 IOW5@P1BexF4FCWD literal 0 Hc-jL100001 diff --git a/test/fixtures/scale.category/ticks-from-data.png b/test/fixtures/scale.category/ticks-from-data.png index 8bc1d66e93644a2625d0f99c356aa77d38691e89..4a65b49fe11f6fe28d956b6d7f85f16bf04b979a 100644 GIT binary patch literal 11278 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 diff --git a/test/specs/core.scale.tests.js b/test/specs/core.scale.tests.js index 93a046186..04ce097ed 100644 --- a/test/specs/core.scale.tests.js +++ b/test/specs/core.scale.tests.js @@ -433,7 +433,7 @@ describe('Core.scale', function() { }); describe('_layers', function() { - it('should default to one layer', function() { + it('should default to three layers', function() { var chart = window.acquireChart({ type: 'line', options: { @@ -446,7 +446,7 @@ describe('Core.scale', function() { }); var scale = chart.scales.x; - expect(scale._layers().length).toEqual(1); + expect(scale._layers().length).toEqual(3); }); it('should default to one layer for custom scales', function() { @@ -482,30 +482,7 @@ describe('Core.scale', function() { expect(scale._layers()[0].z).toEqual(20); }); - it('should default to one layer when z is equal between ticks and grid', function() { - var chart = window.acquireChart({ - type: 'line', - options: { - scales: { - x: { - type: 'linear', - ticks: { - z: 10 - }, - grid: { - z: 10 - } - } - } - } - }); - - var scale = chart.scales.x; - expect(scale._layers().length).toEqual(1); - }); - - - it('should return 2 layers when z is not equal between ticks and grid', function() { + it('should return 3 layers when z is not equal between ticks and grid', function() { var chart = window.acquireChart({ type: 'line', options: { @@ -520,7 +497,7 @@ describe('Core.scale', function() { } }); - expect(chart.scales.x._layers().length).toEqual(2); + expect(chart.scales.x._layers().length).toEqual(3); chart = window.acquireChart({ type: 'line', @@ -536,7 +513,7 @@ describe('Core.scale', function() { } }); - expect(chart.scales.x._layers().length).toEqual(2); + expect(chart.scales.x._layers().length).toEqual(3); chart = window.acquireChart({ type: 'line', @@ -555,7 +532,7 @@ describe('Core.scale', function() { } }); - expect(chart.scales.x._layers().length).toEqual(2); + expect(chart.scales.x._layers().length).toEqual(3); }); -- 2.47.3