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.
281 lines
6.8 KiB
281 lines
6.8 KiB
import {
|
|
createSizedArray,
|
|
} from './helpers/arrays';
|
|
|
|
let subframeEnabled = true;
|
|
let expressionsPlugin = null;
|
|
let expressionsInterfaces = null;
|
|
let idPrefix = '';
|
|
const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
|
|
let _shouldRoundValues = false;
|
|
const bmPow = Math.pow;
|
|
const bmSqrt = Math.sqrt;
|
|
const bmFloor = Math.floor;
|
|
const bmMax = Math.max;
|
|
const bmMin = Math.min;
|
|
|
|
const BMMath = {};
|
|
(function () {
|
|
var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];
|
|
var i;
|
|
var len = propertyNames.length;
|
|
for (i = 0; i < len; i += 1) {
|
|
BMMath[propertyNames[i]] = Math[propertyNames[i]];
|
|
}
|
|
}());
|
|
|
|
function ProjectInterface() { return {}; }
|
|
BMMath.random = Math.random;
|
|
BMMath.abs = function (val) {
|
|
var tOfVal = typeof val;
|
|
if (tOfVal === 'object' && val.length) {
|
|
var absArr = createSizedArray(val.length);
|
|
var i;
|
|
var len = val.length;
|
|
for (i = 0; i < len; i += 1) {
|
|
absArr[i] = Math.abs(val[i]);
|
|
}
|
|
return absArr;
|
|
}
|
|
return Math.abs(val);
|
|
};
|
|
let defaultCurveSegments = 150;
|
|
const degToRads = Math.PI / 180;
|
|
const roundCorner = 0.5519;
|
|
|
|
function roundValues(flag) {
|
|
_shouldRoundValues = !!flag;
|
|
}
|
|
|
|
function bmRnd(value) {
|
|
if (_shouldRoundValues) {
|
|
return Math.round(value);
|
|
}
|
|
return value;
|
|
}
|
|
|
|
function styleDiv(element) {
|
|
element.style.position = 'absolute';
|
|
element.style.top = 0;
|
|
element.style.left = 0;
|
|
element.style.display = 'block';
|
|
element.style.transformOrigin = '0 0';
|
|
element.style.webkitTransformOrigin = '0 0';
|
|
element.style.backfaceVisibility = 'visible';
|
|
element.style.webkitBackfaceVisibility = 'visible';
|
|
element.style.transformStyle = 'preserve-3d';
|
|
element.style.webkitTransformStyle = 'preserve-3d';
|
|
element.style.mozTransformStyle = 'preserve-3d';
|
|
}
|
|
|
|
function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {
|
|
this.type = type;
|
|
this.currentTime = currentTime;
|
|
this.totalTime = totalTime;
|
|
this.direction = frameMultiplier < 0 ? -1 : 1;
|
|
}
|
|
|
|
function BMCompleteEvent(type, frameMultiplier) {
|
|
this.type = type;
|
|
this.direction = frameMultiplier < 0 ? -1 : 1;
|
|
}
|
|
|
|
function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {
|
|
this.type = type;
|
|
this.currentLoop = currentLoop;
|
|
this.totalLoops = totalLoops;
|
|
this.direction = frameMultiplier < 0 ? -1 : 1;
|
|
}
|
|
|
|
function BMSegmentStartEvent(type, firstFrame, totalFrames) {
|
|
this.type = type;
|
|
this.firstFrame = firstFrame;
|
|
this.totalFrames = totalFrames;
|
|
}
|
|
|
|
function BMDestroyEvent(type, target) {
|
|
this.type = type;
|
|
this.target = target;
|
|
}
|
|
|
|
function BMRenderFrameErrorEvent(nativeError, currentTime) {
|
|
this.type = 'renderFrameError';
|
|
this.nativeError = nativeError;
|
|
this.currentTime = currentTime;
|
|
}
|
|
|
|
function BMConfigErrorEvent(nativeError) {
|
|
this.type = 'configError';
|
|
this.nativeError = nativeError;
|
|
}
|
|
|
|
function BMAnimationConfigErrorEvent(type, nativeError) {
|
|
this.type = type;
|
|
this.nativeError = nativeError;
|
|
}
|
|
|
|
const createElementID = (function () {
|
|
var _count = 0;
|
|
return function createID() {
|
|
_count += 1;
|
|
return idPrefix + '__lottie_element_' + _count;
|
|
};
|
|
}());
|
|
|
|
function HSVtoRGB(h, s, v) {
|
|
var r;
|
|
var g;
|
|
var b;
|
|
var i;
|
|
var f;
|
|
var p;
|
|
var q;
|
|
var t;
|
|
i = Math.floor(h * 6);
|
|
f = h * 6 - i;
|
|
p = v * (1 - s);
|
|
q = v * (1 - f * s);
|
|
t = v * (1 - (1 - f) * s);
|
|
switch (i % 6) {
|
|
case 0: r = v; g = t; b = p; break;
|
|
case 1: r = q; g = v; b = p; break;
|
|
case 2: r = p; g = v; b = t; break;
|
|
case 3: r = p; g = q; b = v; break;
|
|
case 4: r = t; g = p; b = v; break;
|
|
case 5: r = v; g = p; b = q; break;
|
|
default: break;
|
|
}
|
|
return [r,
|
|
g,
|
|
b];
|
|
}
|
|
|
|
function RGBtoHSV(r, g, b) {
|
|
var max = Math.max(r, g, b);
|
|
var min = Math.min(r, g, b);
|
|
var d = max - min;
|
|
var h;
|
|
var s = (max === 0 ? 0 : d / max);
|
|
var v = max / 255;
|
|
|
|
switch (max) {
|
|
case min: h = 0; break;
|
|
case r: h = (g - b) + d * (g < b ? 6 : 0); h /= 6 * d; break;
|
|
case g: h = (b - r) + d * 2; h /= 6 * d; break;
|
|
case b: h = (r - g) + d * 4; h /= 6 * d; break;
|
|
default: break;
|
|
}
|
|
|
|
return [
|
|
h,
|
|
s,
|
|
v,
|
|
];
|
|
}
|
|
|
|
function addSaturationToRGB(color, offset) {
|
|
var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);
|
|
hsv[1] += offset;
|
|
if (hsv[1] > 1) {
|
|
hsv[1] = 1;
|
|
} else if (hsv[1] <= 0) {
|
|
hsv[1] = 0;
|
|
}
|
|
return HSVtoRGB(hsv[0], hsv[1], hsv[2]);
|
|
}
|
|
|
|
function addBrightnessToRGB(color, offset) {
|
|
var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);
|
|
hsv[2] += offset;
|
|
if (hsv[2] > 1) {
|
|
hsv[2] = 1;
|
|
} else if (hsv[2] < 0) {
|
|
hsv[2] = 0;
|
|
}
|
|
return HSVtoRGB(hsv[0], hsv[1], hsv[2]);
|
|
}
|
|
|
|
function addHueToRGB(color, offset) {
|
|
var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);
|
|
hsv[0] += offset / 360;
|
|
if (hsv[0] > 1) {
|
|
hsv[0] -= 1;
|
|
} else if (hsv[0] < 0) {
|
|
hsv[0] += 1;
|
|
}
|
|
return HSVtoRGB(hsv[0], hsv[1], hsv[2]);
|
|
}
|
|
|
|
const rgbToHex = (function () {
|
|
var colorMap = [];
|
|
var i;
|
|
var hex;
|
|
for (i = 0; i < 256; i += 1) {
|
|
hex = i.toString(16);
|
|
colorMap[i] = hex.length === 1 ? '0' + hex : hex;
|
|
}
|
|
|
|
return function (r, g, b) {
|
|
if (r < 0) {
|
|
r = 0;
|
|
}
|
|
if (g < 0) {
|
|
g = 0;
|
|
}
|
|
if (b < 0) {
|
|
b = 0;
|
|
}
|
|
return '#' + colorMap[r] + colorMap[g] + colorMap[b];
|
|
};
|
|
}());
|
|
|
|
const setSubframeEnabled = (flag) => { subframeEnabled = !!flag; };
|
|
const getSubframeEnabled = () => subframeEnabled;
|
|
const setExpressionsPlugin = (value) => { expressionsPlugin = value; };
|
|
const getExpressionsPlugin = () => expressionsPlugin;
|
|
const setExpressionInterfaces = (value) => { expressionsInterfaces = value; };
|
|
const getExpressionInterfaces = () => expressionsInterfaces;
|
|
const setDefaultCurveSegments = (value) => { defaultCurveSegments = value; };
|
|
const getDefaultCurveSegments = () => defaultCurveSegments;
|
|
const setIdPrefix = (value) => { idPrefix = value; };
|
|
const getIdPrefix = () => idPrefix;
|
|
|
|
export {
|
|
setSubframeEnabled,
|
|
getSubframeEnabled,
|
|
setExpressionsPlugin,
|
|
getExpressionsPlugin,
|
|
setExpressionInterfaces,
|
|
getExpressionInterfaces,
|
|
setDefaultCurveSegments,
|
|
getDefaultCurveSegments,
|
|
isSafari,
|
|
bmPow,
|
|
bmSqrt,
|
|
bmFloor,
|
|
bmMax,
|
|
bmMin,
|
|
degToRads,
|
|
roundCorner,
|
|
styleDiv,
|
|
bmRnd,
|
|
roundValues,
|
|
BMEnterFrameEvent,
|
|
BMCompleteEvent,
|
|
BMCompleteLoopEvent,
|
|
BMSegmentStartEvent,
|
|
BMDestroyEvent,
|
|
BMRenderFrameErrorEvent,
|
|
BMConfigErrorEvent,
|
|
BMAnimationConfigErrorEvent,
|
|
createElementID,
|
|
addSaturationToRGB,
|
|
addBrightnessToRGB,
|
|
addHueToRGB,
|
|
rgbToHex,
|
|
setIdPrefix,
|
|
getIdPrefix,
|
|
BMMath,
|
|
ProjectInterface,
|
|
};
|