| import { |
| extendPrototype, |
| } from '../utils/functionExtensions'; |
| import Matrix from '../3rd_party/transformation-matrix'; |
| import CanvasRendererBase from './CanvasRendererBase'; |
| import CVContextData from '../elements/canvasElements/CVContextData'; |
| import CVCompElement from '../elements/canvasElements/CVCompElement'; |
| |
| function CanvasRenderer(animationItem, config) { |
| this.animationItem = animationItem; |
| this.renderConfig = { |
| clearCanvas: (config && config.clearCanvas !== undefined) ? config.clearCanvas : true, |
| context: (config && config.context) || null, |
| progressiveLoad: (config && config.progressiveLoad) || false, |
| preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet', |
| imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice', |
| contentVisibility: (config && config.contentVisibility) || 'visible', |
| className: (config && config.className) || '', |
| id: (config && config.id) || '', |
| runExpressions: !config || config.runExpressions === undefined || config.runExpressions, |
| }; |
| this.renderConfig.dpr = (config && config.dpr) || 1; |
| if (this.animationItem.wrapper) { |
| this.renderConfig.dpr = (config && config.dpr) || window.devicePixelRatio || 1; |
| } |
| this.renderedFrame = -1; |
| this.globalData = { |
| frameNum: -1, |
| _mdf: false, |
| renderConfig: this.renderConfig, |
| currentGlobalAlpha: -1, |
| }; |
| this.contextData = new CVContextData(); |
| this.elements = []; |
| this.pendingElements = []; |
| this.transformMat = new Matrix(); |
| this.completeLayers = false; |
| this.rendererType = 'canvas'; |
| if (this.renderConfig.clearCanvas) { |
| this.ctxTransform = this.contextData.transform.bind(this.contextData); |
| this.ctxOpacity = this.contextData.opacity.bind(this.contextData); |
| this.ctxFillStyle = this.contextData.fillStyle.bind(this.contextData); |
| this.ctxStrokeStyle = this.contextData.strokeStyle.bind(this.contextData); |
| this.ctxLineWidth = this.contextData.lineWidth.bind(this.contextData); |
| this.ctxLineCap = this.contextData.lineCap.bind(this.contextData); |
| this.ctxLineJoin = this.contextData.lineJoin.bind(this.contextData); |
| this.ctxMiterLimit = this.contextData.miterLimit.bind(this.contextData); |
| this.ctxFill = this.contextData.fill.bind(this.contextData); |
| this.ctxFillRect = this.contextData.fillRect.bind(this.contextData); |
| this.ctxStroke = this.contextData.stroke.bind(this.contextData); |
| this.save = this.contextData.save.bind(this.contextData); |
| } |
| } |
| extendPrototype([CanvasRendererBase], CanvasRenderer); |
| |
| CanvasRenderer.prototype.createComp = function (data) { |
| return new CVCompElement(data, this.globalData, this); |
| }; |
| |
| export default CanvasRenderer; |