]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Fix measureText bug in spriting (#7492)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Thu, 11 Jun 2020 12:50:17 +0000 (15:50 +0300)
committerGitHub <noreply@github.com>
Thu, 11 Jun 2020 12:50:17 +0000 (08:50 -0400)
37 files changed:
test/fixtures/core.layouts/long-labels.js [new file with mode: 0644]
test/fixtures/core.layouts/long-labels.png [new file with mode: 0644]
test/fixtures/scale.category/ticks-from-data.png
test/fixtures/scale.time/autoskip-major.js
test/fixtures/scale.time/autoskip-major.png
test/fixtures/scale.time/custom-parser.png
test/fixtures/scale.time/data-ty.js
test/fixtures/scale.time/data-ty.png
test/fixtures/scale.time/data-xy.js
test/fixtures/scale.time/data-xy.png
test/fixtures/scale.time/labels-date.png
test/fixtures/scale.time/labels-strings.png
test/fixtures/scale.time/labels.png
test/fixtures/scale.time/source-auto-linear.png
test/fixtures/scale.time/source-auto-series.png
test/fixtures/scale.time/source-data-linear.png
test/fixtures/scale.time/source-data-series-offset-min-max.png
test/fixtures/scale.time/source-data-series.png
test/fixtures/scale.time/source-labels-linear-offset-min-max.png
test/fixtures/scale.time/source-labels-linear.png
test/fixtures/scale.time/source-labels-series-offset-min-max.png
test/fixtures/scale.time/source-labels-series.png
test/fixtures/scale.time/ticks-capacity.png
test/fixtures/scale.time/ticks-minunit.png
test/fixtures/scale.time/ticks-reverse-linear-min-max.png
test/fixtures/scale.time/ticks-reverse-linear.png
test/fixtures/scale.time/ticks-reverse-offset.png
test/fixtures/scale.time/ticks-reverse-series-max.png
test/fixtures/scale.time/ticks-reverse-series-min-max.png
test/fixtures/scale.time/ticks-reverse-series-min.png
test/fixtures/scale.time/ticks-reverse-series.png
test/fixtures/scale.time/ticks-reverse.png
test/fixtures/scale.time/ticks-round.png
test/fixtures/scale.time/ticks-stepsize.png
test/fixtures/scale.time/ticks-unit.png
test/specs/core.layouts.tests.js
test/spriting.js

diff --git a/test/fixtures/core.layouts/long-labels.js b/test/fixtures/core.layouts/long-labels.js
new file mode 100644 (file)
index 0000000..29476ea
--- /dev/null
@@ -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 (file)
index 0000000..fdb6045
Binary files /dev/null and b/test/fixtures/core.layouts/long-labels.png differ
index cab649d6b1de0eb34f494e344c4dfe855910b3e6..9c3fc405ed7d654e2ae2895cecc6962cf9fd16da 100644 (file)
Binary files a/test/fixtures/scale.category/ticks-from-data.png and b/test/fixtures/scale.category/ticks-from-data.png differ
index b72e22e0327ecd3cc9449136f81886612f904aa5..1c693e824f142249d5e7c5bb0df1c163f6ff2c42 100644 (file)
@@ -25,7 +25,8 @@ module.exports = {
                                                        enabled: true
                                                },
                                                source: 'data',
-                                               autoSkip: true
+                                               autoSkip: true,
+                                               maxRotation: 0
                                        }
                                },
                                y: {
index 09d03b80d74343d5afb4c102d6532e5f7a380bf8..3014277a8b4543d7226ee7256206430b2b85c407 100644 (file)
Binary files a/test/fixtures/scale.time/autoskip-major.png and b/test/fixtures/scale.time/autoskip-major.png differ
index 9f873afe6e7bd398ee6bece93aaf5e6f90948a93..710178b186212acf67dcc4f299cc9f9f13dddb01 100644 (file)
Binary files a/test/fixtures/scale.time/custom-parser.png and b/test/fixtures/scale.time/custom-parser.png differ
index a2ded6e4cf832ef9a14b6fe333a16cfa1432b657..be1fa404d26bdd7efe26d18b82bbe1e463dc9184 100644 (file)
@@ -37,7 +37,10 @@ module.exports = {
                        scales: {
                                x: {
                                        type: 'time',
-                                       position: 'bottom'
+                                       position: 'bottom',
+                                       ticks: {
+                                               maxRotation: 0
+                                       }
                                },
                                y: {
                                        display: false
index 8b37e76bdc278005b40b5f61c9823f03afabe2ae..1690650c49d3f9d3ebcad9832e3b790d1d4b1cb0 100644 (file)
Binary files a/test/fixtures/scale.time/data-ty.png and b/test/fixtures/scale.time/data-ty.png differ
index 7dd448ece18d750d005de0a5d60db9b30a090dda..c0288bbca84af8d581341c2d3d85b6bca9aac16e 100644 (file)
@@ -37,7 +37,10 @@ module.exports = {
                        scales: {
                                x: {
                                        type: 'time',
-                                       position: 'bottom'
+                                       position: 'bottom',
+                                       ticks: {
+                                               maxRotation: 0
+                                       }
                                },
                                y: {
                                        display: false
index 8b37e76bdc278005b40b5f61c9823f03afabe2ae..1690650c49d3f9d3ebcad9832e3b790d1d4b1cb0 100644 (file)
Binary files a/test/fixtures/scale.time/data-xy.png and b/test/fixtures/scale.time/data-xy.png differ
index 567239a8440e184dbb6daa5f9341a67b4aca5347..aec874240993d079f60772701e136f564eedb820 100644 (file)
Binary files a/test/fixtures/scale.time/labels-date.png and b/test/fixtures/scale.time/labels-date.png differ
index 567239a8440e184dbb6daa5f9341a67b4aca5347..aec874240993d079f60772701e136f564eedb820 100644 (file)
Binary files a/test/fixtures/scale.time/labels-strings.png and b/test/fixtures/scale.time/labels-strings.png differ
index 77f267708f7c278fa3cbb816300fc0b2626022f8..5170f5131a069da4d8627145575b9acba250f7fe 100644 (file)
Binary files a/test/fixtures/scale.time/labels.png and b/test/fixtures/scale.time/labels.png differ
index 24dae2cb00bfa87ceb8c5f68145635725b3d4d47..80eb07c736246ec9d0c53a75e7cc86430bc75c50 100644 (file)
Binary files a/test/fixtures/scale.time/source-auto-linear.png and b/test/fixtures/scale.time/source-auto-linear.png differ
index 979854796c0151edf185b1bcca9d8e83cec99fe0..f9ee22d3ba4d5714b2ff60089877ad65c58b6689 100644 (file)
Binary files a/test/fixtures/scale.time/source-auto-series.png and b/test/fixtures/scale.time/source-auto-series.png differ
index 9b2c94a3105a646b2a3f2896018a695b291242e0..7200319e39b84de17710b0bad4e0c0e1e4802d88 100644 (file)
Binary files a/test/fixtures/scale.time/source-data-linear.png and b/test/fixtures/scale.time/source-data-linear.png differ
index 9a9f8b40b6005b6bbcb16253d6b328d15b97d84c..5743f84615b4184afa0bc050250d03f97c99df5f 100644 (file)
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
index 05163aab679b1a66fadad900ce705aa88cd5ddc3..b03f6c67c1ffd883b8c2786c9f2c8d8292495b58 100644 (file)
Binary files a/test/fixtures/scale.time/source-data-series.png and b/test/fixtures/scale.time/source-data-series.png differ
index 4127fbf0eef3feef898d4db53dd684b0ffa38afc..1f9bf9045560ee5e93a4e1d96b968973d354766e 100644 (file)
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
index 9b2c94a3105a646b2a3f2896018a695b291242e0..7200319e39b84de17710b0bad4e0c0e1e4802d88 100644 (file)
Binary files a/test/fixtures/scale.time/source-labels-linear.png and b/test/fixtures/scale.time/source-labels-linear.png differ
index 9a9f8b40b6005b6bbcb16253d6b328d15b97d84c..5743f84615b4184afa0bc050250d03f97c99df5f 100644 (file)
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
index 05163aab679b1a66fadad900ce705aa88cd5ddc3..b03f6c67c1ffd883b8c2786c9f2c8d8292495b58 100644 (file)
Binary files a/test/fixtures/scale.time/source-labels-series.png and b/test/fixtures/scale.time/source-labels-series.png differ
index d4cba0d3546dc658df5137b2f38e640c8b3f4777..9c5524d955a4f97001645dc75e832ea8a0faf4c4 100644 (file)
Binary files a/test/fixtures/scale.time/ticks-capacity.png and b/test/fixtures/scale.time/ticks-capacity.png differ
index a6add12a183e58d9ad962825f22671f4cee9482e..861870dd0df2b8e93972ca07c6a35175f6b7eac3 100644 (file)
Binary files a/test/fixtures/scale.time/ticks-minunit.png and b/test/fixtures/scale.time/ticks-minunit.png differ
index e01a4e0e3a6bfea69299f7381d3ba84f26a1e9f0..5a2871571ceedae767d17a4290bc77394ccaa734 100644 (file)
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
index ff2b517f716116499d4027d2ab67216381cbc5b9..6c12592cf48fefdb28c46fb67511ae1a1b9eb3f7 100644 (file)
Binary files a/test/fixtures/scale.time/ticks-reverse-linear.png and b/test/fixtures/scale.time/ticks-reverse-linear.png differ
index bfdbaf55deae171ef7434cbbbabf24c429b05919..7889c1bcce2bd0abc6ff37ff7799a97fa767b12c 100644 (file)
Binary files a/test/fixtures/scale.time/ticks-reverse-offset.png and b/test/fixtures/scale.time/ticks-reverse-offset.png differ
index 589ef39b21af434fb74e4a7d0c5320a9e8e75e57..8c40d12a831a68a321e48e6211d150f8596a4e28 100644 (file)
Binary files a/test/fixtures/scale.time/ticks-reverse-series-max.png and b/test/fixtures/scale.time/ticks-reverse-series-max.png differ
index f7add0367802a23639064b2fea158a12cecb3ac8..9daacfbafb7020831bdc538a4d66fbc85bb843b7 100644 (file)
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
index 7a82b0fb8fe0305fe8e0cf4417e38b4ab61f273b..bf6ca14332f3b545410ca28ec7ce66a233a1897c 100644 (file)
Binary files a/test/fixtures/scale.time/ticks-reverse-series-min.png and b/test/fixtures/scale.time/ticks-reverse-series-min.png differ
index 134b4e6458d81d982f35f9aa50a04d17bf8456ae..a6077ee543941956a31536002b74231b49918bc5 100644 (file)
Binary files a/test/fixtures/scale.time/ticks-reverse-series.png and b/test/fixtures/scale.time/ticks-reverse-series.png differ
index eff4f5e20d50be8a7108d8ac1c830555e0e8de04..ee07e8e74cfc7c06774ee176cc89fb3ff43ecbfe 100644 (file)
Binary files a/test/fixtures/scale.time/ticks-reverse.png and b/test/fixtures/scale.time/ticks-reverse.png differ
index 40477169158cf17b10a171ecd3e95b3b8236659f..e969ba1365d9ac0421f676793a059b081afdf234 100644 (file)
Binary files a/test/fixtures/scale.time/ticks-round.png and b/test/fixtures/scale.time/ticks-round.png differ
index ea51b06c7d9a8e4136935ef5a24c070d4902afdc..005f38b61bedd56cca3de9bc9985bb12030f687d 100644 (file)
Binary files a/test/fixtures/scale.time/ticks-stepsize.png and b/test/fixtures/scale.time/ticks-stepsize.png differ
index 0485c2ec68c5cedf334e1c7ae390ccb59823d6e8..08210e77b971bfd530a779849b8e603b304eff0b 100644 (file)
Binary files a/test/fixtures/scale.time/ticks-unit.png and b/test/fixtures/scale.time/ticks-unit.png differ
index 7efceaa183bae1b6e2f6110af68acfc5009d8949..a7ef5a681f97d68ebbc6b7d58ca28fd73546d00f 100644 (file)
@@ -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',
index 981f0dd3eb64dd5bde3011c653707c62647a4ef7..9de02dd6247bff2d4b6606607a4e6856a6ad743e 100644 (file)
@@ -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};