blob: 7a43d7963de54e069613944f2f1b88bfaa0577f1 [file] [log] [blame]
import { getLocationHref } from '../../main';
import {
createElementID,
} from '../../utils/common';
import filtersFactory from '../../utils/filters';
import SVGTintFilter from './effects/SVGTintEffect';
import SVGFillFilter from './effects/SVGFillFilter';
import SVGStrokeEffect from './effects/SVGStrokeEffect';
import SVGTritoneFilter from './effects/SVGTritoneFilter';
import SVGProLevelsFilter from './effects/SVGProLevelsFilter';
import SVGDropShadowEffect from './effects/SVGDropShadowEffect';
import SVGMatte3Effect from './effects/SVGMatte3Effect';
import SVGGaussianBlurEffect from './effects/SVGGaussianBlurEffect';
var registeredEffects = {};
function SVGEffects(elem) {
var i;
var len = elem.data.ef ? elem.data.ef.length : 0;
var filId = createElementID();
var fil = filtersFactory.createFilter(filId, true);
var count = 0;
this.filters = [];
var filterManager;
for (i = 0; i < len; i += 1) {
filterManager = null;
var type = elem.data.ef[i].ty;
if (registeredEffects[type]) {
var Effect = registeredEffects[type].effect;
filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem);
if (registeredEffects[type].countsAsEffect) {
count += 1;
}
}
if (elem.data.ef[i].ty === 20) {
count += 1;
filterManager = new SVGTintFilter(fil, elem.effectsManager.effectElements[i]);
} else if (elem.data.ef[i].ty === 21) {
count += 1;
filterManager = new SVGFillFilter(fil, elem.effectsManager.effectElements[i]);
} else if (elem.data.ef[i].ty === 22) {
filterManager = new SVGStrokeEffect(elem, elem.effectsManager.effectElements[i]);
} else if (elem.data.ef[i].ty === 23) {
count += 1;
filterManager = new SVGTritoneFilter(fil, elem.effectsManager.effectElements[i]);
} else if (elem.data.ef[i].ty === 24) {
count += 1;
filterManager = new SVGProLevelsFilter(fil, elem.effectsManager.effectElements[i]);
} else if (elem.data.ef[i].ty === 25) {
count += 1;
filterManager = new SVGDropShadowEffect(fil, elem.effectsManager.effectElements[i]);
} else if (elem.data.ef[i].ty === 28) {
// count += 1;
filterManager = new SVGMatte3Effect(fil, elem.effectsManager.effectElements[i], elem);
} else if (elem.data.ef[i].ty === 29) {
count += 1;
filterManager = new SVGGaussianBlurEffect(fil, elem.effectsManager.effectElements[i]);
}
if (filterManager) {
this.filters.push(filterManager);
}
}
if (count) {
elem.globalData.defs.appendChild(fil);
elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');
}
if (this.filters.length) {
elem.addRenderableComponent(this);
}
}
SVGEffects.prototype.renderFrame = function (_isFirstFrame) {
var i;
var len = this.filters.length;
for (i = 0; i < len; i += 1) {
this.filters[i].renderFrame(_isFirstFrame);
}
};
export function registerEffect(id, effect, countsAsEffect) {
registeredEffects[id] = {
effect,
countsAsEffect,
};
}
export default SVGEffects;