45 lines
1.6 KiB
JavaScript
45 lines
1.6 KiB
JavaScript
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;
|