You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
4.4 KiB
153 lines
4.4 KiB
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; |
|
}; |
|
})();
|
|
|