UNPKG

highcharts

Version:
69 lines (68 loc) 2.31 kB
/* * * * (c) 2010-2024 Torstein Honsi, Magdalena Gut * * License: www.highcharts.com/license * * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!! * * */ import U from '../../Core/Utilities.js'; const { defined } = U; /** * */ function rescalePatternFill(element, stackHeight, width, height, borderWidth = 1) { const fill = element && element.attr('fill'), match = fill && fill.match(/url\(([^)]+)\)/); if (match) { const patternPath = document.querySelector(`${match[1]} path`); if (patternPath) { let bBox = patternPath.getBBox(); // Firefox (v108/Mac) is unable to detect the bounding box within // defs. Without this block, the pictorial is not rendered. if (bBox.width === 0) { const parent = patternPath.parentElement; // Temporarily append it to the root element.renderer.box.appendChild(patternPath); bBox = patternPath.getBBox(); parent.appendChild(patternPath); } let scaleX = 1 / (bBox.width + borderWidth); const scaleY = stackHeight / height / bBox.height, aspectRatio = bBox.width / bBox.height, pointAspectRatio = width / stackHeight, x = -bBox.width / 2; if (aspectRatio < pointAspectRatio) { scaleX = scaleX * aspectRatio / pointAspectRatio; } patternPath.setAttribute('stroke-width', borderWidth / (width * scaleX)); patternPath.setAttribute('transform', 'translate(0.5, 0)' + `scale(${scaleX} ${scaleY}) ` + `translate(${x + borderWidth * scaleX / 2}, ${-bBox.y})`); } } } /** * */ function getStackMetrics(yAxis, shape) { let height = yAxis.len, y = 0; if (shape && defined(shape.max)) { y = yAxis.toPixels(shape.max, true); height = yAxis.len - y; } return { height, y }; } /** * */ function invertShadowGroup(shadowGroup, yAxis) { const inverted = yAxis.chart.inverted; if (inverted) { shadowGroup.attr({ rotation: inverted ? 90 : 0, scaleX: inverted ? -1 : 1 }); } } export default { rescalePatternFill, invertShadowGroup, getStackMetrics };