58 lines
1.7 KiB
JavaScript
58 lines
1.7 KiB
JavaScript
import {
|
|
extendPrototype,
|
|
} from '../../utils/functionExtensions';
|
|
import {
|
|
createSizedArray,
|
|
} from '../../utils/helpers/arrays';
|
|
import PropertyFactory from '../../utils/PropertyFactory';
|
|
import CanvasRendererBase from '../../renderers/CanvasRendererBase';
|
|
import CVBaseElement from './CVBaseElement';
|
|
import ICompElement from '../CompElement';
|
|
|
|
function CVCompElement(data, globalData, comp) {
|
|
this.completeLayers = false;
|
|
this.layers = data.layers;
|
|
this.pendingElements = [];
|
|
this.elements = createSizedArray(this.layers.length);
|
|
this.initElement(data, globalData, comp);
|
|
this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true };
|
|
}
|
|
|
|
extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);
|
|
|
|
CVCompElement.prototype.renderInnerContent = function () {
|
|
var ctx = this.canvasContext;
|
|
ctx.beginPath();
|
|
ctx.moveTo(0, 0);
|
|
ctx.lineTo(this.data.w, 0);
|
|
ctx.lineTo(this.data.w, this.data.h);
|
|
ctx.lineTo(0, this.data.h);
|
|
ctx.lineTo(0, 0);
|
|
ctx.clip();
|
|
var i;
|
|
var len = this.layers.length;
|
|
for (i = len - 1; i >= 0; i -= 1) {
|
|
if (this.completeLayers || this.elements[i]) {
|
|
this.elements[i].renderFrame();
|
|
}
|
|
}
|
|
};
|
|
|
|
CVCompElement.prototype.destroy = function () {
|
|
var i;
|
|
var len = this.layers.length;
|
|
for (i = len - 1; i >= 0; i -= 1) {
|
|
if (this.elements[i]) {
|
|
this.elements[i].destroy();
|
|
}
|
|
}
|
|
this.layers = null;
|
|
this.elements = null;
|
|
};
|
|
|
|
CVCompElement.prototype.createComp = function (data) {
|
|
return new CVCompElement(data, this.globalData, this);
|
|
};
|
|
|
|
export default CVCompElement;
|