12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- 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);
- }
- };
- SVGEffects.prototype.getEffects = function (type) {
- var i;
- var len = this.filters.length;
- var effects = [];
- for (i = 0; i < len; i += 1) {
- if (this.filters[i].type === type) {
- effects.push(this.filters[i]);
- }
- }
- return effects;
- };
- export function registerEffect(id, effect, countsAsEffect) {
- registeredEffects[id] = {
- effect,
- countsAsEffect,
- };
- }
- export default SVGEffects;
|