UNPKG

lottie-web

Version:

After Effects plugin for exporting animations to SVG + JavaScript or canvas + JavaScript

45 lines (37 loc) 1.62 kB
import createNS from '../../../utils/helpers/svg_elements'; function SVGGaussianBlurEffect(filter, filterManager, elem, id) { // Outset the filter region by 100% on all sides to accommodate blur expansion. filter.setAttribute('x', '-100%'); filter.setAttribute('y', '-100%'); filter.setAttribute('width', '300%'); filter.setAttribute('height', '300%'); this.filterManager = filterManager; var feGaussianBlur = createNS('feGaussianBlur'); feGaussianBlur.setAttribute('result', id); filter.appendChild(feGaussianBlur); this.feGaussianBlur = feGaussianBlur; } SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) { if (forceRender || this.filterManager._mdf) { // Empirical value, matching AE's blur appearance. var kBlurrinessToSigma = 0.3; var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; // Dimensions mapping: // // 1 -> horizontal & vertical // 2 -> horizontal only // 3 -> vertical only // var dimensions = this.filterManager.effectElements[1].p.v; var sigmaX = (dimensions == 3) ? 0 : sigma; // eslint-disable-line eqeqeq var sigmaY = (dimensions == 2) ? 0 : sigma; // eslint-disable-line eqeqeq this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); // Repeat edges mapping: // // 0 -> off -> duplicate // 1 -> on -> wrap var edgeMode = (this.filterManager.effectElements[2].p.v == 1) ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq this.feGaussianBlur.setAttribute('edgeMode', edgeMode); } }; export default SVGGaussianBlurEffect;