| function SVGGaussianBlurEffect(filter, filterManager){ |
| // 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'); |
| 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; |
| var sigmaY = (dimensions == 2) ? 0 : sigma; |
| |
| 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'; |
| this.feGaussianBlur.setAttribute('edgeMode', edgeMode); |
| } |
| } |