From cb14217c88c0e307d2ed129449d7d5d04b7d90ea Mon Sep 17 00:00:00 2001 From: Akihiko Kusanagi Date: Sat, 27 Oct 2018 23:55:11 +0800 Subject: [PATCH] Add error margin for detecting if a point or line is in the chartArea (#5790) --- src/core/core.scale.js | 6 ++++-- src/elements/element.point.js | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/core/core.scale.js b/src/core/core.scale.js index 363815e63..c267cb4ad 100644 --- a/src/core/core.scale.js +++ b/src/core/core.scale.js @@ -710,6 +710,8 @@ module.exports = Element.extend({ var yTickStart = options.position === 'bottom' ? me.top + axisWidth : me.bottom - tl - axisWidth; var yTickEnd = options.position === 'bottom' ? me.top + axisWidth + tl : me.bottom + axisWidth; + var epsilon = 0.0000001; // 0.0000001 is margin in pixels for Accumulated error. + helpers.each(ticks, function(tick, index) { // autoskipper skipped this tick (#4635) if (helpers.isNullOrUndef(tick.label)) { @@ -753,7 +755,7 @@ module.exports = Element.extend({ } var xLineValue = getLineValue(me, index, gridLines.offsetGridLines && ticks.length > 1); - if (xLineValue < me.left) { + if (xLineValue < me.left - epsilon) { lineColor = 'rgba(0,0,0,0)'; } xLineValue += helpers.aliasPixel(lineWidth); @@ -780,7 +782,7 @@ module.exports = Element.extend({ labelX = isLeft ? me.right - labelXOffset : me.left + labelXOffset; var yLineValue = getLineValue(me, index, gridLines.offsetGridLines && ticks.length > 1); - if (yLineValue < me.top) { + if (yLineValue < me.top - epsilon) { lineColor = 'rgba(0,0,0,0)'; } yLineValue += helpers.aliasPixel(lineWidth); diff --git a/src/elements/element.point.js b/src/elements/element.point.js index 2bcdc88f0..56eb57966 100644 --- a/src/elements/element.point.js +++ b/src/elements/element.point.js @@ -72,14 +72,14 @@ module.exports = Element.extend({ var radius = vm.radius; var x = vm.x; var y = vm.y; - var errMargin = 1.01; // 1.01 is margin for Accumulated error. (Especially Edge, IE.) + var epsilon = 0.0000001; // 0.0000001 is margin in pixels for Accumulated error. if (vm.skip) { return; } // Clipping for Points. - if (chartArea === undefined || (model.x >= chartArea.left && chartArea.right * errMargin >= model.x && model.y >= chartArea.top && chartArea.bottom * errMargin >= model.y)) { + if (chartArea === undefined || (model.x > chartArea.left - epsilon && chartArea.right + epsilon > model.x && model.y > chartArea.top - epsilon && chartArea.bottom + epsilon > model.y)) { ctx.strokeStyle = vm.borderColor || defaultColor; ctx.lineWidth = helpers.valueOrDefault(vm.borderWidth, defaults.global.elements.point.borderWidth); ctx.fillStyle = vm.backgroundColor || defaultColor;