UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

77 lines (76 loc) 2.6 kB
function isSafeNum(num) { return isFinite(num); } function createLinearGradient(ctx, obj, rect) { var x = obj.x == null ? 0 : obj.x; var x2 = obj.x2 == null ? 1 : obj.x2; var y = obj.y == null ? 0 : obj.y; var y2 = obj.y2 == null ? 0 : obj.y2; if (!obj.global) { x = x * rect.width + rect.x; x2 = x2 * rect.width + rect.x; y = y * rect.height + rect.y; y2 = y2 * rect.height + rect.y; } x = isSafeNum(x) ? x : 0; x2 = isSafeNum(x2) ? x2 : 1; y = isSafeNum(y) ? y : 0; y2 = isSafeNum(y2) ? y2 : 0; var canvasGradient = ctx.createLinearGradient(x, y, x2, y2); return canvasGradient; } function createRadialGradient(ctx, obj, rect) { var width = rect.width; var height = rect.height; var min = Math.min(width, height); var x = obj.x == null ? 0.5 : obj.x; var y = obj.y == null ? 0.5 : obj.y; var r = obj.r == null ? 0.5 : obj.r; if (!obj.global) { x = x * width + rect.x; y = y * height + rect.y; r = r * min; } x = isSafeNum(x) ? x : 0.5; y = isSafeNum(y) ? y : 0.5; r = r >= 0 && isSafeNum(r) ? r : 0.5; var canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r); return canvasGradient; } function getCanvasGradient(ctx, obj, rect) { var canvasGradient = obj.type === "radial" ? createRadialGradient(ctx, obj, rect) : createLinearGradient(ctx, obj, rect); var colorStops = obj.colorStops; for (var i = 0; i < colorStops.length; i++) { canvasGradient.addColorStop(colorStops[i].offset, colorStops[i].color); } return canvasGradient; } function isClipPathChanged(clipPaths, prevClipPaths) { if (clipPaths === prevClipPaths || !clipPaths && !prevClipPaths) { return false; } if (!clipPaths || !prevClipPaths || clipPaths.length !== prevClipPaths.length) { return true; } for (var i = 0; i < clipPaths.length; i++) { if (clipPaths[i] !== prevClipPaths[i]) { return true; } } return false; } function parseInt10(val) { return parseInt(val, 10); } function getSize(root, whIdx, opts) { var wh = ["width", "height"][whIdx]; var cwh = ["clientWidth", "clientHeight"][whIdx]; var plt = ["paddingLeft", "paddingTop"][whIdx]; var prb = ["paddingRight", "paddingBottom"][whIdx]; if (opts[wh] != null && opts[wh] !== "auto") { return parseFloat(opts[wh]); } var stl = document.defaultView.getComputedStyle(root); return (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh])) - (parseInt10(stl[plt]) || 0) - (parseInt10(stl[prb]) || 0) | 0; } export { createLinearGradient, createRadialGradient, getCanvasGradient, getSize, isClipPathChanged };