blob: c106372758e143faf2737bf1df88488149312a06 [file] [log] [blame]
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);
}
}