import { RADIAN_TO_DEGREE, retrieve2, logError, isFunction } from '../core/util.js'; import { parse } from '../tool/color.js'; import env from '../core/env.js'; var mathRound = Math.round; export function normalizeColor(color) { var opacity; if (!color || color === 'transparent') { color = 'none'; } else if (typeof color === 'string' && color.indexOf('rgba') > -1) { var arr = parse(color); if (arr) { color = 'rgb(' + arr[0] + ',' + arr[1] + ',' + arr[2] + ')'; opacity = arr[3]; } } return { color: color, opacity: opacity == null ? 1 : opacity }; } var EPSILON = 1e-4; export function isAroundZero(transform) { return transform < EPSILON && transform > -EPSILON; } export function round3(transform) { return mathRound(transform * 1e3) / 1e3; } export function round4(transform) { return mathRound(transform * 1e4) / 1e4; } export function round1(transform) { return mathRound(transform * 10) / 10; } export function getMatrixStr(m) { return 'matrix(' + round3(m[0]) + ',' + round3(m[1]) + ',' + round3(m[2]) + ',' + round3(m[3]) + ',' + round4(m[4]) + ',' + round4(m[5]) + ')'; } export var TEXT_ALIGN_TO_ANCHOR = { left: 'start', right: 'end', center: 'middle', middle: 'middle' }; export function adjustTextY(y, lineHeight, textBaseline) { if (textBaseline === 'top') { y += lineHeight / 2; } else if (textBaseline === 'bottom') { y -= lineHeight / 2; } return y; } export function hasShadow(style) { return style && (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY); } export function getShadowKey(displayable) { var style = displayable.style; var globalScale = displayable.getGlobalScale(); return [ style.shadowColor, (style.shadowBlur || 0).toFixed(2), (style.shadowOffsetX || 0).toFixed(2), (style.shadowOffsetY || 0).toFixed(2), globalScale[0], globalScale[1] ].join(','); } export function getClipPathsKey(clipPaths) { var key = []; if (clipPaths) { for (var i = 0; i < clipPaths.length; i++) { var clipPath = clipPaths[i]; key.push(clipPath.id); } } return key.join(','); } export function isImagePattern(val) { return val && (!!val.image); } export function isSVGPattern(val) { return val && (!!val.svgElement); } export function isPattern(val) { return isImagePattern(val) || isSVGPattern(val); } export function isLinearGradient(val) { return val.type === 'linear'; } export function isRadialGradient(val) { return val.type === 'radial'; } export function isGradient(val) { return val && (val.type === 'linear' || val.type === 'radial'); } export function getIdURL(id) { return "url(#" + id + ")"; } export function getPathPrecision(el) { var scale = el.getGlobalScale(); var size = Math.max(scale[0], scale[1]); return Math.max(Math.ceil(Math.log(size) / Math.log(10)), 1); } export function getSRTTransformString(transform) { var x = transform.x || 0; var y = transform.y || 0; var rotation = (transform.rotation || 0) * RADIAN_TO_DEGREE; var scaleX = retrieve2(transform.scaleX, 1); var scaleY = retrieve2(transform.scaleY, 1); var skewX = transform.skewX || 0; var skewY = transform.skewY || 0; var res = []; if (x || y) { res.push("translate(" + x + "px," + y + "px)"); } if (rotation) { res.push("rotate(" + rotation + ")"); } if (scaleX !== 1 || scaleY !== 1) { res.push("scale(" + scaleX + "," + scaleY + ")"); } if (skewX || skewY) { res.push("skew(" + mathRound(skewX * RADIAN_TO_DEGREE) + "deg, " + mathRound(skewY * RADIAN_TO_DEGREE) + "deg)"); } return res.join(' '); } export var encodeBase64 = (function () { if (env.hasGlobalWindow && isFunction(window.btoa)) { return function (str) { return window.btoa(unescape(encodeURIComponent(str))); }; } if (typeof Buffer !== 'undefined') { return function (str) { return Buffer.from(str).toString('base64'); }; } return function (str) { if (process.env.NODE_ENV !== 'production') { logError('Base64 isn\'t natively supported in the current environment.'); } return null; }; })();