blob: 16103b8d2ba11c17383dfb1abda8133ba958ff7f [file] [log] [blame]
function SVGDropShadowEffect(filter, filterManager){
/*<feGaussianBlur in="SourceAlpha" stdDeviation="3"/> <!-- stdDeviation is how much to blur -->
<feOffset dx="2" dy="2" result="offsetblur"/> <!-- how much to offset -->
<feMerge>
<feMergeNode/> <!-- this contains the offset blurred image -->
<feMergeNode in="SourceGraphic"/> <!-- this contains the element that the filter is applied to -->
</feMerge>*/
/*<feFlood flood-color="#3D4574" flood-opacity="0.5" result="offsetColor"/>*/
filter.setAttribute('x','-100%');
filter.setAttribute('y','-100%');
filter.setAttribute('width','400%');
filter.setAttribute('height','400%');
this.filterManager = filterManager;
var feGaussianBlur = document.createElementNS(svgNS,'feGaussianBlur');
feGaussianBlur.setAttribute('in','SourceAlpha');
feGaussianBlur.setAttribute('result','drop_shadow_1');
feGaussianBlur.setAttribute('stdDeviation','0');
this.feGaussianBlur = feGaussianBlur;
filter.appendChild(feGaussianBlur);
var feOffset = document.createElementNS(svgNS,'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 = document.createElementNS(svgNS,'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 = document.createElementNS(svgNS,'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 = document.createElementNS(svgNS,'feMerge');
filter.appendChild(feMerge);
var feMergeNode;
feMergeNode = document.createElementNS(svgNS,'feMergeNode');
feMerge.appendChild(feMergeNode);
feMergeNode = document.createElementNS(svgNS,'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;
}
}*/
}
};