From 535bc4adce9ec2cd4e4e77b59c07a64afb9f4ae0 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Sun, 18 Apr 2021 12:12:58 +0300 Subject: [PATCH] Scale: draw border on separate layer after grid --- 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 2eda295df0a..f4cb8d34a00 100644 --- a/src/core/core.scale.js +++ b/src/core/core.scale.js @@ -1007,7 +1007,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) { @@ -1369,9 +1369,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; @@ -1418,27 +1415,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(); } /** @@ -1520,6 +1532,7 @@ export default class Scale extends Element { me.drawBackground(); me.drawGrid(chartArea); + me.drawBorder(); me.drawTitle(); me.drawLabels(chartArea); } @@ -1534,7 +1547,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, @@ -1551,6 +1564,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 52777619a09..5f1a0a40b41 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 00000000000..785a40456bc --- /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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 T_T(S{jzT{B{JkpokkkGHh!t)P literal 0 HcmV?d00001 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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 F_&0w#H`f3F diff --git a/test/specs/core.scale.tests.js b/test/specs/core.scale.tests.js index 93a04618607..04ce097edb9 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); });