blob: ef22f3a9ac36aa4f86913ceb68f38af49fad1c0c [file] [log] [blame]
import { getLocationHref } from '../../main';
import {
createElementID,
} from '../../utils/common';
import filtersFactory from '../../utils/filters';
var registeredEffects = {};
var idPrefix = 'filter_result_';
function SVGEffects(elem) {
var i;
var source = 'SourceGraphic';
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, idPrefix + count, source);
source = idPrefix + count;
if (registeredEffects[type].countsAsEffect) {
count += 1;
}
}
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;