From: Jukka Kurkela Date: Thu, 11 Jun 2020 12:50:17 +0000 (+0300) Subject: Fix measureText bug in spriting (#7492) X-Git-Tag: v3.0.0-beta.2~91 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=281ee42deffdeb6925b77aa46c31c0d3059f255d;p=thirdparty%2FChart.js.git Fix measureText bug in spriting (#7492) --- diff --git a/test/fixtures/core.layouts/long-labels.js b/test/fixtures/core.layouts/long-labels.js new file mode 100644 index 000000000..29476ea9e --- /dev/null +++ b/test/fixtures/core.layouts/long-labels.js @@ -0,0 +1,36 @@ +module.exports = { + config: { + type: 'line', + data: { + datasets: [ + {data: [10, 5, 0, 25, 78, -10]} + ], + labels: ['tick1 is very long one', 'tick2', 'tick3', 'tick4', 'tick5', 'tick6 is very long one'] + }, + options: { + legend: { + display: false + }, + scales: { + x: { + type: 'category', + ticks: { + maxRotation: 0, + autoSkip: false + } + }, + y: { + type: 'linear', + position: 'right' + } + } + } + }, + options: { + spriteText: true, + canvas: { + height: 150, + width: 512 + } + } +}; diff --git a/test/fixtures/core.layouts/long-labels.png b/test/fixtures/core.layouts/long-labels.png new file mode 100644 index 000000000..fdb604526 Binary files /dev/null and b/test/fixtures/core.layouts/long-labels.png differ diff --git a/test/fixtures/scale.category/ticks-from-data.png b/test/fixtures/scale.category/ticks-from-data.png index cab649d6b..9c3fc405e 100644 Binary files a/test/fixtures/scale.category/ticks-from-data.png and b/test/fixtures/scale.category/ticks-from-data.png differ diff --git a/test/fixtures/scale.time/autoskip-major.js b/test/fixtures/scale.time/autoskip-major.js index b72e22e03..1c693e824 100644 --- a/test/fixtures/scale.time/autoskip-major.js +++ b/test/fixtures/scale.time/autoskip-major.js @@ -25,7 +25,8 @@ module.exports = { enabled: true }, source: 'data', - autoSkip: true + autoSkip: true, + maxRotation: 0 } }, y: { diff --git a/test/fixtures/scale.time/autoskip-major.png b/test/fixtures/scale.time/autoskip-major.png index 09d03b80d..3014277a8 100644 Binary files a/test/fixtures/scale.time/autoskip-major.png and b/test/fixtures/scale.time/autoskip-major.png differ diff --git a/test/fixtures/scale.time/custom-parser.png b/test/fixtures/scale.time/custom-parser.png index 9f873afe6..710178b18 100644 Binary files a/test/fixtures/scale.time/custom-parser.png and b/test/fixtures/scale.time/custom-parser.png differ diff --git a/test/fixtures/scale.time/data-ty.js b/test/fixtures/scale.time/data-ty.js index a2ded6e4c..be1fa404d 100644 --- a/test/fixtures/scale.time/data-ty.js +++ b/test/fixtures/scale.time/data-ty.js @@ -37,7 +37,10 @@ module.exports = { scales: { x: { type: 'time', - position: 'bottom' + position: 'bottom', + ticks: { + maxRotation: 0 + } }, y: { display: false diff --git a/test/fixtures/scale.time/data-ty.png b/test/fixtures/scale.time/data-ty.png index 8b37e76bd..1690650c4 100644 Binary files a/test/fixtures/scale.time/data-ty.png and b/test/fixtures/scale.time/data-ty.png differ diff --git a/test/fixtures/scale.time/data-xy.js b/test/fixtures/scale.time/data-xy.js index 7dd448ece..c0288bbca 100644 --- a/test/fixtures/scale.time/data-xy.js +++ b/test/fixtures/scale.time/data-xy.js @@ -37,7 +37,10 @@ module.exports = { scales: { x: { type: 'time', - position: 'bottom' + position: 'bottom', + ticks: { + maxRotation: 0 + } }, y: { display: false diff --git a/test/fixtures/scale.time/data-xy.png b/test/fixtures/scale.time/data-xy.png index 8b37e76bd..1690650c4 100644 Binary files a/test/fixtures/scale.time/data-xy.png and b/test/fixtures/scale.time/data-xy.png differ diff --git a/test/fixtures/scale.time/labels-date.png b/test/fixtures/scale.time/labels-date.png index 567239a84..aec874240 100644 Binary files a/test/fixtures/scale.time/labels-date.png and b/test/fixtures/scale.time/labels-date.png differ diff --git a/test/fixtures/scale.time/labels-strings.png b/test/fixtures/scale.time/labels-strings.png index 567239a84..aec874240 100644 Binary files a/test/fixtures/scale.time/labels-strings.png and b/test/fixtures/scale.time/labels-strings.png differ diff --git a/test/fixtures/scale.time/labels.png b/test/fixtures/scale.time/labels.png index 77f267708..5170f5131 100644 Binary files a/test/fixtures/scale.time/labels.png and b/test/fixtures/scale.time/labels.png differ diff --git a/test/fixtures/scale.time/source-auto-linear.png b/test/fixtures/scale.time/source-auto-linear.png index 24dae2cb0..80eb07c73 100644 Binary files a/test/fixtures/scale.time/source-auto-linear.png and b/test/fixtures/scale.time/source-auto-linear.png differ diff --git a/test/fixtures/scale.time/source-auto-series.png b/test/fixtures/scale.time/source-auto-series.png index 979854796..f9ee22d3b 100644 Binary files a/test/fixtures/scale.time/source-auto-series.png and b/test/fixtures/scale.time/source-auto-series.png differ diff --git a/test/fixtures/scale.time/source-data-linear.png b/test/fixtures/scale.time/source-data-linear.png index 9b2c94a31..7200319e3 100644 Binary files a/test/fixtures/scale.time/source-data-linear.png and b/test/fixtures/scale.time/source-data-linear.png differ diff --git a/test/fixtures/scale.time/source-data-series-offset-min-max.png b/test/fixtures/scale.time/source-data-series-offset-min-max.png index 9a9f8b40b..5743f8461 100644 Binary files a/test/fixtures/scale.time/source-data-series-offset-min-max.png and b/test/fixtures/scale.time/source-data-series-offset-min-max.png differ diff --git a/test/fixtures/scale.time/source-data-series.png b/test/fixtures/scale.time/source-data-series.png index 05163aab6..b03f6c67c 100644 Binary files a/test/fixtures/scale.time/source-data-series.png and b/test/fixtures/scale.time/source-data-series.png differ diff --git a/test/fixtures/scale.time/source-labels-linear-offset-min-max.png b/test/fixtures/scale.time/source-labels-linear-offset-min-max.png index 4127fbf0e..1f9bf9045 100644 Binary files a/test/fixtures/scale.time/source-labels-linear-offset-min-max.png and b/test/fixtures/scale.time/source-labels-linear-offset-min-max.png differ diff --git a/test/fixtures/scale.time/source-labels-linear.png b/test/fixtures/scale.time/source-labels-linear.png index 9b2c94a31..7200319e3 100644 Binary files a/test/fixtures/scale.time/source-labels-linear.png and b/test/fixtures/scale.time/source-labels-linear.png differ diff --git a/test/fixtures/scale.time/source-labels-series-offset-min-max.png b/test/fixtures/scale.time/source-labels-series-offset-min-max.png index 9a9f8b40b..5743f8461 100644 Binary files a/test/fixtures/scale.time/source-labels-series-offset-min-max.png and b/test/fixtures/scale.time/source-labels-series-offset-min-max.png differ diff --git a/test/fixtures/scale.time/source-labels-series.png b/test/fixtures/scale.time/source-labels-series.png index 05163aab6..b03f6c67c 100644 Binary files a/test/fixtures/scale.time/source-labels-series.png and b/test/fixtures/scale.time/source-labels-series.png differ diff --git a/test/fixtures/scale.time/ticks-capacity.png b/test/fixtures/scale.time/ticks-capacity.png index d4cba0d35..9c5524d95 100644 Binary files a/test/fixtures/scale.time/ticks-capacity.png and b/test/fixtures/scale.time/ticks-capacity.png differ diff --git a/test/fixtures/scale.time/ticks-minunit.png b/test/fixtures/scale.time/ticks-minunit.png index a6add12a1..861870dd0 100644 Binary files a/test/fixtures/scale.time/ticks-minunit.png and b/test/fixtures/scale.time/ticks-minunit.png differ diff --git a/test/fixtures/scale.time/ticks-reverse-linear-min-max.png b/test/fixtures/scale.time/ticks-reverse-linear-min-max.png index e01a4e0e3..5a2871571 100644 Binary files a/test/fixtures/scale.time/ticks-reverse-linear-min-max.png and b/test/fixtures/scale.time/ticks-reverse-linear-min-max.png differ diff --git a/test/fixtures/scale.time/ticks-reverse-linear.png b/test/fixtures/scale.time/ticks-reverse-linear.png index ff2b517f7..6c12592cf 100644 Binary files a/test/fixtures/scale.time/ticks-reverse-linear.png and b/test/fixtures/scale.time/ticks-reverse-linear.png differ diff --git a/test/fixtures/scale.time/ticks-reverse-offset.png b/test/fixtures/scale.time/ticks-reverse-offset.png index bfdbaf55d..7889c1bcc 100644 Binary files a/test/fixtures/scale.time/ticks-reverse-offset.png and b/test/fixtures/scale.time/ticks-reverse-offset.png differ diff --git a/test/fixtures/scale.time/ticks-reverse-series-max.png b/test/fixtures/scale.time/ticks-reverse-series-max.png index 589ef39b2..8c40d12a8 100644 Binary files a/test/fixtures/scale.time/ticks-reverse-series-max.png and b/test/fixtures/scale.time/ticks-reverse-series-max.png differ diff --git a/test/fixtures/scale.time/ticks-reverse-series-min-max.png b/test/fixtures/scale.time/ticks-reverse-series-min-max.png index f7add0367..9daacfbaf 100644 Binary files a/test/fixtures/scale.time/ticks-reverse-series-min-max.png and b/test/fixtures/scale.time/ticks-reverse-series-min-max.png differ diff --git a/test/fixtures/scale.time/ticks-reverse-series-min.png b/test/fixtures/scale.time/ticks-reverse-series-min.png index 7a82b0fb8..bf6ca1433 100644 Binary files a/test/fixtures/scale.time/ticks-reverse-series-min.png and b/test/fixtures/scale.time/ticks-reverse-series-min.png differ diff --git a/test/fixtures/scale.time/ticks-reverse-series.png b/test/fixtures/scale.time/ticks-reverse-series.png index 134b4e645..a6077ee54 100644 Binary files a/test/fixtures/scale.time/ticks-reverse-series.png and b/test/fixtures/scale.time/ticks-reverse-series.png differ diff --git a/test/fixtures/scale.time/ticks-reverse.png b/test/fixtures/scale.time/ticks-reverse.png index eff4f5e20..ee07e8e74 100644 Binary files a/test/fixtures/scale.time/ticks-reverse.png and b/test/fixtures/scale.time/ticks-reverse.png differ diff --git a/test/fixtures/scale.time/ticks-round.png b/test/fixtures/scale.time/ticks-round.png index 404771691..e969ba136 100644 Binary files a/test/fixtures/scale.time/ticks-round.png and b/test/fixtures/scale.time/ticks-round.png differ diff --git a/test/fixtures/scale.time/ticks-stepsize.png b/test/fixtures/scale.time/ticks-stepsize.png index ea51b06c7..005f38b61 100644 Binary files a/test/fixtures/scale.time/ticks-stepsize.png and b/test/fixtures/scale.time/ticks-stepsize.png differ diff --git a/test/fixtures/scale.time/ticks-unit.png b/test/fixtures/scale.time/ticks-unit.png index 0485c2ec6..08210e77b 100644 Binary files a/test/fixtures/scale.time/ticks-unit.png and b/test/fixtures/scale.time/ticks-unit.png differ diff --git a/test/specs/core.layouts.tests.js b/test/specs/core.layouts.tests.js index 7efceaa18..a7ef5a681 100644 --- a/test/specs/core.layouts.tests.js +++ b/test/specs/core.layouts.tests.js @@ -3,6 +3,8 @@ function getLabels(scale) { } describe('Chart.layouts', function() { + describe('auto', jasmine.fixture.specs('core.layouts')); + it('should be exposed through Chart.layouts', function() { expect(Chart.layouts).toBeDefined(); expect(typeof Chart.layouts).toBe('object'); @@ -96,72 +98,6 @@ describe('Chart.layouts', function() { expect(chart.scales.y.labelRotation).toBeCloseTo(0); }); - it('should fit scales with long labels correctly', function() { - var chart = window.acquireChart({ - type: 'line', - data: { - datasets: [ - {data: [10, 5, 0, 25, 78, -10]} - ], - labels: ['tick1 is very long one', 'tick2', 'tick3', 'tick4', 'tick5', 'tick6 is very long one'] - }, - options: { - legend: { - display: false - }, - scales: { - x: { - type: 'category', - ticks: { - maxRotation: 0, - autoSkip: false - } - }, - y: { - type: 'linear', - position: 'right' - } - } - } - }, { - canvas: { - height: 150, - width: 512 - } - }); - - expect(chart.chartArea.bottom).toBeCloseToPixel(120); - expect(chart.chartArea.left).toBeCloseToPixel(60); - expect(chart.chartArea.right).toBeCloseToPixel(452); - expect(chart.chartArea.top).toBeCloseToPixel(7); - - // Is xScale at the right spot - expect(chart.scales.x.bottom).toBeCloseToPixel(150); - expect(chart.scales.x.left).toBeCloseToPixel(60); - expect(chart.scales.x.right).toBeCloseToPixel(452); - expect(chart.scales.x.top).toBeCloseToPixel(120); - expect(chart.scales.x.labelRotation).toBeCloseTo(0); - - expect(chart.scales.x.height).toBeCloseToPixel(30); - expect(chart.scales.x.paddingLeft).toBeCloseToPixel(60); - expect(chart.scales.x.paddingTop).toBeCloseToPixel(0); - expect(chart.scales.x.paddingRight).toBeCloseToPixel(60); - expect(chart.scales.x.paddingBottom).toBeCloseToPixel(0); - - // Is yScale at the right spot - expect(chart.scales.y.bottom).toBeCloseToPixel(120); - expect(chart.scales.y.left).toBeCloseToPixel(452); - expect(chart.scales.y.right).toBeCloseToPixel(486); - expect(chart.scales.y.top).toBeCloseToPixel(7); - expect(chart.scales.y.labelRotation).toBeCloseTo(0); - - expect(chart.scales.y.width).toBeCloseToPixel(34); - expect(chart.scales.y.paddingLeft).toBeCloseToPixel(0); - expect(chart.scales.y.paddingTop).toBeCloseToPixel(7); - expect(chart.scales.y.paddingRight).toBeCloseToPixel(0); - expect(chart.scales.y.paddingBottom).toBeCloseToPixel(7); - }); - it('should fit scales that overlap the chart area', function() { var chart = window.acquireChart({ type: 'radar', diff --git a/test/spriting.js b/test/spriting.js index 981f0dd3e..9de02dd62 100644 --- a/test/spriting.js +++ b/test/spriting.js @@ -34,20 +34,19 @@ const fontWidth = [ 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 7, 8, 7 ]; -// get coordinates and size for one character (index = character code) -function getChar(index) { - const i = index - startIndex; - const size = 17; - const x = Math.min(i % columns, columns - 1); - const y = Math.min(Math.floor(i / columns), rows - 1); - return {sx: x * size, sy: y * size, w: fontWidth[i], h: fontHeight}; +// get coordinates and size for one character +function getChar(asciiCode) { + const index = asciiCode - startIndex; + const x = Math.min(index % columns, columns - 1); + const y = Math.min(Math.floor(index / columns), rows - 1); + return {sx: x * cellWidth, sy: y * cellHeight, w: fontWidth[index], h: fontHeight}; } function measureText(text) { let width = 0; if (text && text.charCodeAt) { for (let i = 0; i < text.length; ++i) { - width += fontWidth[Math.min(223, text.charCodeAt(i))]; + width += fontWidth[Math.min(223, text.charCodeAt(i) - startIndex)]; } } return {width};