1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- 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;
|