From 67371c4efb8bd32264bb816debc21f821b1b8a60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torstein=20H=C3=B8nsi?= Date: Wed, 3 May 2017 08:42:34 +0200 Subject: [PATCH] Addition to #3131, consider border when defining shape limits. --- js/parts-3d/Column.js | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/js/parts-3d/Column.js b/js/parts-3d/Column.js index 3c1dada0558..5dd6fb895f4 100644 --- a/js/parts-3d/Column.js +++ b/js/parts-3d/Column.js @@ -30,7 +30,15 @@ wrap(seriesTypes.column.prototype, 'translate', function (proceed) { var series = this, chart = series.chart, seriesOptions = series.options, - depth = seriesOptions.depth || 25; + depth = seriesOptions.depth || 25, + borderCrisp = series.borderWidth % 2 ? 0.5 : 0; + + if ( + (chart.inverted && !series.yAxis.reversed) || + (!chart.inverted && series.yAxis.reversed) + ) { + borderCrisp *= -1; + } var stack = seriesOptions.stacking ? (seriesOptions.stack || 0) : series.index; // #4743 var z = stack * (depth + (seriesOptions.groupZPadding || 1)); @@ -44,23 +52,27 @@ wrap(seriesTypes.column.prototype, 'translate', function (proceed) { if (point.y !== null) { var shapeArgs = point.shapeArgs, tooltipPos = point.tooltipPos, - dimensions = [['x', 'width'], ['y', 'height']]; // Array for final shapeArgs calculation. + // Array for final shapeArgs calculation. // We are checking two dimensions (x and y). + dimensions = [['x', 'width'], ['y', 'height']], + borderlessBase; // crisped rects can have +/- 0.5 pixels offset - // #3131 We need to check if column shape arguments are inside plotArea. - + // #3131 We need to check if column shape arguments are inside plotArea. each(dimensions, function (d) { + borderlessBase = shapeArgs[d[0]] - borderCrisp; if ( - shapeArgs[d[0]] + shapeArgs[d[1]] < 0 || // End column position is smaller than axis start. - shapeArgs[d[0]] > series[d[0] + 'Axis'].len // Start column position is bigger than axis end. - ) { + borderlessBase + shapeArgs[d[1]] < 0 || // End column position is smaller than axis start. + borderlessBase > series[d[0] + 'Axis'].len // Start column position is bigger than axis end. + ) { for (var key in shapeArgs) { // Set args to 0 if column is outside the chart. shapeArgs[key] = 0; } - } if (shapeArgs[d[0]] < 0) { + } + if (borderlessBase < 0) { shapeArgs[d[1]] += shapeArgs[d[0]]; shapeArgs[d[0]] = 0; - } if (shapeArgs[d[0]] + shapeArgs[d[1]] > series[d[0] + 'Axis'].len) { + } + if (borderlessBase + shapeArgs[d[1]] > series[d[0] + 'Axis'].len) { shapeArgs[d[1]] = series[d[0] + 'Axis'].len - shapeArgs[d[0]]; } });