From ecfa7b24c64d873befe625d21b64c826a304e10e Mon Sep 17 00:00:00 2001 From: Akihiko Kusanagi Date: Thu, 29 Nov 2018 20:52:56 +0800 Subject: [PATCH] Add support for CanvasPattern and CanvasGradient in tooltip (#5869) --- src/core/core.tooltip.js | 47 ++++++----- test/fixtures/core.tooltip/opacity.js | 104 +++++++++++++++++++++++++ test/fixtures/core.tooltip/opacity.png | Bin 0 -> 11800 bytes test/specs/core.tooltip.tests.js | 2 + 4 files changed, 128 insertions(+), 25 deletions(-) create mode 100644 test/fixtures/core.tooltip/opacity.js create mode 100644 test/fixtures/core.tooltip/opacity.png diff --git a/src/core/core.tooltip.js b/src/core/core.tooltip.js index c529812cc..c3245d9cf 100644 --- a/src/core/core.tooltip.js +++ b/src/core/core.tooltip.js @@ -168,14 +168,6 @@ var positioners = { } }; -/** - * Helper method to merge the opacity into a color - */ -function mergeOpacity(colorString, opacity) { - var color = helpers.color(colorString); - return color.alpha(opacity * color.alpha()).rgbaString(); -} - // Helper to push or concat based on if the 2nd parameter is an array or not function pushOrConcat(base, toPush) { if (toPush) { @@ -734,7 +726,7 @@ var exports = module.exports = Element.extend({ return {x1: x1, x2: x2, x3: x3, y1: y1, y2: y2, y3: y3}; }, - drawTitle: function(pt, vm, ctx, opacity) { + drawTitle: function(pt, vm, ctx) { var title = vm.title; if (title.length) { @@ -744,7 +736,7 @@ var exports = module.exports = Element.extend({ var titleFontSize = vm.titleFontSize; var titleSpacing = vm.titleSpacing; - ctx.fillStyle = mergeOpacity(vm.titleFontColor, opacity); + ctx.fillStyle = vm.titleFontColor; ctx.font = helpers.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily); var i, len; @@ -759,7 +751,7 @@ var exports = module.exports = Element.extend({ } }, - drawBody: function(pt, vm, ctx, opacity) { + drawBody: function(pt, vm, ctx) { var bodyFontSize = vm.bodyFontSize; var bodySpacing = vm.bodySpacing; var body = vm.body; @@ -776,7 +768,7 @@ var exports = module.exports = Element.extend({ }; // Before body lines - ctx.fillStyle = mergeOpacity(vm.bodyFontColor, opacity); + ctx.fillStyle = vm.bodyFontColor; helpers.each(vm.beforeBody, fillLineOfText); var drawColorBoxes = vm.displayColors; @@ -784,7 +776,7 @@ var exports = module.exports = Element.extend({ // Draw body lines now helpers.each(body, function(bodyItem, i) { - var textColor = mergeOpacity(vm.labelTextColors[i], opacity); + var textColor = vm.labelTextColors[i]; ctx.fillStyle = textColor; helpers.each(bodyItem.before, fillLineOfText); @@ -792,16 +784,16 @@ var exports = module.exports = Element.extend({ // Draw Legend-like boxes if needed if (drawColorBoxes) { // Fill a white rect so that colours merge nicely if the opacity is < 1 - ctx.fillStyle = mergeOpacity(vm.legendColorBackground, opacity); + ctx.fillStyle = vm.legendColorBackground; ctx.fillRect(pt.x, pt.y, bodyFontSize, bodyFontSize); // Border ctx.lineWidth = 1; - ctx.strokeStyle = mergeOpacity(vm.labelColors[i].borderColor, opacity); + ctx.strokeStyle = vm.labelColors[i].borderColor; ctx.strokeRect(pt.x, pt.y, bodyFontSize, bodyFontSize); // Inner square - ctx.fillStyle = mergeOpacity(vm.labelColors[i].backgroundColor, opacity); + ctx.fillStyle = vm.labelColors[i].backgroundColor; ctx.fillRect(pt.x + 1, pt.y + 1, bodyFontSize - 2, bodyFontSize - 2); ctx.fillStyle = textColor; } @@ -820,7 +812,7 @@ var exports = module.exports = Element.extend({ pt.y -= bodySpacing; // Remove last body spacing }, - drawFooter: function(pt, vm, ctx, opacity) { + drawFooter: function(pt, vm, ctx) { var footer = vm.footer; if (footer.length) { @@ -829,7 +821,7 @@ var exports = module.exports = Element.extend({ ctx.textAlign = vm._footerAlign; ctx.textBaseline = 'top'; - ctx.fillStyle = mergeOpacity(vm.footerFontColor, opacity); + ctx.fillStyle = vm.footerFontColor; ctx.font = helpers.fontString(vm.footerFontSize, vm._footerFontStyle, vm._footerFontFamily); helpers.each(footer, function(line) { @@ -839,9 +831,9 @@ var exports = module.exports = Element.extend({ } }, - drawBackground: function(pt, vm, ctx, tooltipSize, opacity) { - ctx.fillStyle = mergeOpacity(vm.backgroundColor, opacity); - ctx.strokeStyle = mergeOpacity(vm.borderColor, opacity); + drawBackground: function(pt, vm, ctx, tooltipSize) { + ctx.fillStyle = vm.backgroundColor; + ctx.strokeStyle = vm.borderColor; ctx.lineWidth = vm.borderWidth; var xAlign = vm.xAlign; var yAlign = vm.yAlign; @@ -906,21 +898,26 @@ var exports = module.exports = Element.extend({ var hasTooltipContent = vm.title.length || vm.beforeBody.length || vm.body.length || vm.afterBody.length || vm.footer.length; if (this._options.enabled && hasTooltipContent) { + ctx.save(); + ctx.globalAlpha = opacity; + // Draw Background - this.drawBackground(pt, vm, ctx, tooltipSize, opacity); + this.drawBackground(pt, vm, ctx, tooltipSize); // Draw Title, Body, and Footer pt.x += vm.xPadding; pt.y += vm.yPadding; // Titles - this.drawTitle(pt, vm, ctx, opacity); + this.drawTitle(pt, vm, ctx); // Body - this.drawBody(pt, vm, ctx, opacity); + this.drawBody(pt, vm, ctx); // Footer - this.drawFooter(pt, vm, ctx, opacity); + this.drawFooter(pt, vm, ctx); + + ctx.restore(); } }, diff --git a/test/fixtures/core.tooltip/opacity.js b/test/fixtures/core.tooltip/opacity.js new file mode 100644 index 000000000..8b872e75d --- /dev/null +++ b/test/fixtures/core.tooltip/opacity.js @@ -0,0 +1,104 @@ +var patternCanvas = document.createElement('canvas'); +var patternContext = patternCanvas.getContext('2d'); + +patternCanvas.width = 6; +patternCanvas.height = 6; +patternContext.fillStyle = '#ff0000'; +patternContext.fillRect(0, 0, 6, 6); +patternContext.fillStyle = '#ffff00'; +patternContext.fillRect(0, 0, 4, 4); + +var pattern = patternContext.createPattern(patternCanvas, 'repeat'); + +var gradient; + +module.exports = { + config: { + type: 'line', + data: { + datasets: [{ + data: [8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8], + pointBorderColor: '#ff0000', + pointBackgroundColor: '#00ff00', + showLine: false + }, { + label: '', + data: [4, 4, 4, 4, 4, 5, 3, 4, 4, 4, 4], + pointBorderColor: pattern, + pointBackgroundColor: pattern, + showLine: false + }, { + label: '', + data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + showLine: false + }], + labels: ['', '', '', '', '', '', '', '', '', '', ''] + }, + options: { + legend: false, + title: false, + scales: { + xAxes: [{display: false}], + yAxes: [{display: false}] + }, + elements: { + line: { + fill: false + } + }, + tooltips: { + mode: 'nearest', + intersect: false, + callbacks: { + label: function() { + return '\u200b'; + } + } + }, + layout: { + padding: 15 + } + }, + plugins: [{ + beforeDatasetsUpdate: function(chart) { + if (!gradient) { + gradient = chart.ctx.createLinearGradient(0, 0, 512, 256); + gradient.addColorStop(0, '#ff0000'); + gradient.addColorStop(1, '#0000ff'); + } + chart.config.data.datasets[2].pointBorderColor = gradient; + chart.config.data.datasets[2].pointBackgroundColor = gradient; + + return true; + }, + afterDraw: function(chart) { + var canvas = chart.canvas; + var rect = canvas.getBoundingClientRect(); + var point, event; + + for (var i = 0; i < 3; ++i) { + for (var j = 0; j < 11; ++j) { + point = chart.getDatasetMeta(i).data[j]; + event = { + type: 'mousemove', + target: canvas, + clientX: rect.left + point._model.x, + clientY: rect.top + point._model.y + }; + chart.handleEvent(event); + chart.tooltip.handleEvent(event); + chart.tooltip.transition(1); + chart.tooltip._view.opacity = j / 10; + chart.tooltip.draw(); + } + } + } + }] + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/core.tooltip/opacity.png b/test/fixtures/core.tooltip/opacity.png new file mode 100644 index 0000000000000000000000000000000000000000..142dcc05f60fb6f966594da191fb7c8b109c23ea GIT binary patch literal 11800 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 literal 0 Hc-jL100001 diff --git a/test/specs/core.tooltip.tests.js b/test/specs/core.tooltip.tests.js index 9d858a49e..c342fe646 100755 --- a/test/specs/core.tooltip.tests.js +++ b/test/specs/core.tooltip.tests.js @@ -1,5 +1,7 @@ // Test the rectangle element describe('Core.Tooltip', function() { + describe('auto', jasmine.fixture.specs('core.tooltip')); + describe('config', function() { it('should not include the dataset label in the body string if not defined', function() { var data = { -- 2.47.3