blob: a2101fdbfdcc63947fe8dc0cc5a0d694aa7c6b82 [file] [log] [blame]
function SVGDropShadowEffect(filter, filterManager) {
var filterSize = filterManager.container.globalData.renderConfig.filterSize
filter.setAttribute('x', filterSize.x);
filter.setAttribute('y', filterSize.y);
filter.setAttribute('width', filterSize.width);
filter.setAttribute('height', filterSize.height);
this.filterManager = filterManager;
var feGaussianBlur = createNS('feGaussianBlur');
feGaussianBlur.setAttribute('in', 'SourceAlpha');
feGaussianBlur.setAttribute('result', 'drop_shadow_1');
feGaussianBlur.setAttribute('stdDeviation', '0');
this.feGaussianBlur = feGaussianBlur;
filter.appendChild(feGaussianBlur);
var feOffset = createNS('feOffset');
feOffset.setAttribute('dx', '25');
feOffset.setAttribute('dy', '0');
feOffset.setAttribute('in', 'drop_shadow_1');
feOffset.setAttribute('result', 'drop_shadow_2');
this.feOffset = feOffset;
filter.appendChild(feOffset);
var feFlood = createNS('feFlood');
feFlood.setAttribute('flood-color', '#00ff00');
feFlood.setAttribute('flood-opacity', '1');
feFlood.setAttribute('result', 'drop_shadow_3');
this.feFlood = feFlood;
filter.appendChild(feFlood);
var feComposite = createNS('feComposite');
feComposite.setAttribute('in', 'drop_shadow_3');
feComposite.setAttribute('in2', 'drop_shadow_2');
feComposite.setAttribute('operator', 'in');
feComposite.setAttribute('result', 'drop_shadow_4');
filter.appendChild(feComposite);
var feMerge = createNS('feMerge');
filter.appendChild(feMerge);
var feMergeNode;
feMergeNode = createNS('feMergeNode');
feMerge.appendChild(feMergeNode);
feMergeNode = createNS('feMergeNode');
feMergeNode.setAttribute('in', 'SourceGraphic');
this.feMergeNode = feMergeNode;
this.feMerge = feMerge;
this.originalNodeAdded = false;
feMerge.appendChild(feMergeNode);
}
SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {
if(forceRender || this.filterManager._mdf) {
if(forceRender || this.filterManager.effectElements[4].p._mdf) {
this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);
}
if(forceRender || this.filterManager.effectElements[0].p._mdf) {
var col = this.filterManager.effectElements[0].p.v;
this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0]*255), Math.round(col[1]*255), Math.round(col[2]*255)));
}
if(forceRender || this.filterManager.effectElements[1].p._mdf) {
this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v/255);
}
if(forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {
var distance = this.filterManager.effectElements[3].p.v;
var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;
var x = distance * Math.cos(angle);
var y = distance * Math.sin(angle);
this.feOffset.setAttribute('dx', x);
this.feOffset.setAttribute('dy', y);
}
/* if(forceRender || this.filterManager.effectElements[5].p._mdf){
if(this.filterManager.effectElements[5].p.v === 1 && this.originalNodeAdded) {
this.feMerge.removeChild(this.feMergeNode);
this.originalNodeAdded = false;
} else if(this.filterManager.effectElements[5].p.v === 0 && !this.originalNodeAdded) {
this.feMerge.appendChild(this.feMergeNode);
this.originalNodeAdded = true;
}
} */
}
};