{"version":3,"sources":["webpack:///./node_modules/zrender/lib/Layer.js","webpack:///./node_modules/zrender/lib/Storage.js","webpack:///./node_modules/zrender/lib/Painter.js"],"names":["util","_config","devicePixelRatio","Style","Pattern","returnFalse","createDom","id","painter","dpr","newDom","createCanvas","width","getWidth","height","getHeight","newDomStyle","style","position","left","top","setAttribute","Layer","dom","isObject","this","domStyle","onselectstart","domBack","ctxBack","config","clearColor","motionBlur","lastFrameAlpha","prototype","constructor","__dirty","__used","__drawIndex","__startIndex","__endIndex","incremental","getElementCount","initContext","ctx","getContext","createBackBuffer","scale","resize","clear","clearAll","clearColorGradientOrPattern","haveMotionBLur","globalCompositeOperation","drawImage","clearRect","colorStops","__canvasGradient","getGradient","x","y","image","getCanvasPattern","call","save","fillStyle","fillRect","restore","globalAlpha","_default","module","exports","env","Group","timsort","shapeCompareFunc","a","b","zlevel","z","z2","Storage","_roots","_displayList","_displayListLen","traverse","cb","context","i","length","getDisplayList","update","includeIgnore","updateDisplayList","roots","displayList","len","_updateAndAddDisplayable","canvasSupported","el","clipPaths","ignore","beforeUpdate","afterUpdate","userSetClipPath","clipPath","slice","currentClipPath","parentClipPath","parent","updateTransform","push","isGroup","children","_children","child","__clipPaths","addRoot","__storage","addChildrenToStorage","addToStorage","delRoot","root","delChildrenFromStorage","Array","l","idx","indexOf","delFromStorage","splice","dirty","dispose","_renderList","displayableSortFunc","logError","BoundingRect","requestAnimationFrame","Image","HOVER_LAYER_ZLEVEL","CANVAS_ZLEVEL","EL_AFTER_INCREMENTAL_INC","INCREMENTAL_INC","parseInt10","val","parseInt","isLayerValid","layer","__builtin__","refresh","tmpRect","viewRect","isDisplayableCulled","copy","getBoundingRect","transform","applyTransform","intersect","isClipPathChanged","prevClipPaths","doClip","setTransform","beginPath","buildPath","shape","clip","restoreTransform","createRoot","domRoot","document","createElement","cssText","join","Painter","storage","opts","type","singleCanvas","nodeName","toUpperCase","_opts","extend","_singleCanvas","rootStyle","innerHTML","zlevelList","_zlevelList","layers","_layers","_layerConfig","_needsManuallyCompositing","_width","_height","mainLayer","_domRoot","_getSize","appendChild","_hoverlayer","_hoverElements","getType","isSingleCanvas","getViewportRoot","getViewportRootOffset","viewportRoot","offsetLeft","offsetTop","paintAll","list","_redrawId","Math","random","_paintList","_backgroundColor","refreshHover","addHover","hoverStyle","__hoverMir","elMirror","silent","__from","setStyle","removeHover","hoverElements","clearHover","from","hoverLayer","getLayer","scope","originalEl","__zr","invisible","invTransform","_doPaintEl","getHoverLayer","redrawId","_updateLayerStatus","finished","_doPaintList","_compositeManually","self","eachBuiltinLayer","virtual","layerList","zi","k","start","useTimer","Date","now","startTime","firstEl","notClear","console","error","__dirtyText","dTime","prevElClipPaths","wxa","each","draw","currentLayer","forcePaint","m","opacity","culling","prevEl","beforeBrush","brush","afterBrush","merge","insertLayer","layersMap","prevLayer","prevDom","nextSibling","insertBefore","firstChild","eachLayer","eachOtherLayer","getLayers","updatePrevLayer","prevZlevel","incrementalLayerCount","_clearLayer","setBackgroundColor","backgroundColor","configLayer","layerConfig","_zlevel","delLayer","parentNode","removeChild","display","hasOwnProperty","_progressiveLayers","clearLayer","getRenderedCanvas","imageLayer","pixelRatio","renderToCanvas","whIdx","wh","cwh","plt","prb","parseFloat","stl","defaultView","getComputedStyle","pathToImage","path","canvas","rect","shadowBlurSize","shadowBlur","shadowOffsetX","shadowOffsetY","lineWidth","hasStroke","leftMargin","max","rightMargin","topMargin","bottomMargin","pathTransform","rotation","ImageShape","imgShape"],"mappings":"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","file":"js/chunk-52ff625e.377e3634.js","sourcesContent":["var util = require(\"./core/util\");\n\nvar _config = require(\"./config\");\n\nvar devicePixelRatio = _config.devicePixelRatio;\n\nvar Style = require(\"./graphic/Style\");\n\nvar Pattern = require(\"./graphic/Pattern\");\n\n/**\n * @module zrender/Layer\n * @author pissang(https://www.github.com/pissang)\n */\nfunction returnFalse() {\n return false;\n}\n/**\n * 创建dom\n *\n * @inner\n * @param {string} id dom id 待用\n * @param {Painter} painter painter instance\n * @param {number} number\n */\n\n\nfunction createDom(id, painter, dpr) {\n var newDom = util.createCanvas();\n var width = painter.getWidth();\n var height = painter.getHeight();\n var newDomStyle = newDom.style;\n\n if (newDomStyle) {\n // In node or some other non-browser environment\n newDomStyle.position = 'absolute';\n newDomStyle.left = 0;\n newDomStyle.top = 0;\n newDomStyle.width = width + 'px';\n newDomStyle.height = height + 'px';\n newDom.setAttribute('data-zr-dom-id', id);\n }\n\n newDom.width = width * dpr;\n newDom.height = height * dpr;\n return newDom;\n}\n/**\n * @alias module:zrender/Layer\n * @constructor\n * @extends module:zrender/mixin/Transformable\n * @param {string} id\n * @param {module:zrender/Painter} painter\n * @param {number} [dpr]\n */\n\n\nvar Layer = function (id, painter, dpr) {\n var dom;\n dpr = dpr || devicePixelRatio;\n\n if (typeof id === 'string') {\n dom = createDom(id, painter, dpr);\n } // Not using isDom because in node it will return false\n else if (util.isObject(id)) {\n dom = id;\n id = dom.id;\n }\n\n this.id = id;\n this.dom = dom;\n var domStyle = dom.style;\n\n if (domStyle) {\n // Not in node\n dom.onselectstart = returnFalse; // 避免页面选中的尴尬\n\n domStyle['-webkit-user-select'] = 'none';\n domStyle['user-select'] = 'none';\n domStyle['-webkit-touch-callout'] = 'none';\n domStyle['-webkit-tap-highlight-color'] = 'rgba(0,0,0,0)';\n domStyle['padding'] = 0; // eslint-disable-line dot-notation\n\n domStyle['margin'] = 0; // eslint-disable-line dot-notation\n\n domStyle['border-width'] = 0;\n }\n\n this.domBack = null;\n this.ctxBack = null;\n this.painter = painter;\n this.config = null; // Configs\n\n /**\n * 每次清空画布的颜色\n * @type {string}\n * @default 0\n */\n\n this.clearColor = 0;\n /**\n * 是否开启动态模糊\n * @type {boolean}\n * @default false\n */\n\n this.motionBlur = false;\n /**\n * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n * @type {number}\n * @default 0.7\n */\n\n this.lastFrameAlpha = 0.7;\n /**\n * Layer dpr\n * @type {number}\n */\n\n this.dpr = dpr;\n};\n\nLayer.prototype = {\n constructor: Layer,\n __dirty: true,\n __used: false,\n __drawIndex: 0,\n __startIndex: 0,\n __endIndex: 0,\n incremental: false,\n getElementCount: function () {\n return this.__endIndex - this.__startIndex;\n },\n initContext: function () {\n this.ctx = this.dom.getContext('2d');\n this.ctx.dpr = this.dpr;\n },\n createBackBuffer: function () {\n var dpr = this.dpr;\n this.domBack = createDom('back-' + this.id, this.painter, dpr);\n this.ctxBack = this.domBack.getContext('2d');\n\n if (dpr !== 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n },\n\n /**\n * @param {number} width\n * @param {number} height\n */\n resize: function (width, height) {\n var dpr = this.dpr;\n var dom = this.dom;\n var domStyle = dom.style;\n var domBack = this.domBack;\n\n if (domStyle) {\n domStyle.width = width + 'px';\n domStyle.height = height + 'px';\n }\n\n dom.width = width * dpr;\n dom.height = height * dpr;\n\n if (domBack) {\n domBack.width = width * dpr;\n domBack.height = height * dpr;\n\n if (dpr !== 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n }\n },\n\n /**\n * 清空该层画布\n * @param {boolean} [clearAll]=false Clear all with out motion blur\n * @param {Color} [clearColor]\n */\n clear: function (clearAll, clearColor) {\n var dom = this.dom;\n var ctx = this.ctx;\n var width = dom.width;\n var height = dom.height;\n var clearColor = clearColor || this.clearColor;\n var haveMotionBLur = this.motionBlur && !clearAll;\n var lastFrameAlpha = this.lastFrameAlpha;\n var dpr = this.dpr;\n\n if (haveMotionBLur) {\n if (!this.domBack) {\n this.createBackBuffer();\n }\n\n this.ctxBack.globalCompositeOperation = 'copy';\n this.ctxBack.drawImage(dom, 0, 0, width / dpr, height / dpr);\n }\n\n ctx.clearRect(0, 0, width, height);\n\n if (clearColor && clearColor !== 'transparent') {\n var clearColorGradientOrPattern; // Gradient\n\n if (clearColor.colorStops) {\n // Cache canvas gradient\n clearColorGradientOrPattern = clearColor.__canvasGradient || Style.getGradient(ctx, clearColor, {\n x: 0,\n y: 0,\n width: width,\n height: height\n });\n clearColor.__canvasGradient = clearColorGradientOrPattern;\n } // Pattern\n else if (clearColor.image) {\n clearColorGradientOrPattern = Pattern.prototype.getCanvasPattern.call(clearColor, ctx);\n }\n\n ctx.save();\n ctx.fillStyle = clearColorGradientOrPattern || clearColor;\n ctx.fillRect(0, 0, width, height);\n ctx.restore();\n }\n\n if (haveMotionBLur) {\n var domBack = this.domBack;\n ctx.save();\n ctx.globalAlpha = lastFrameAlpha;\n ctx.drawImage(domBack, 0, 0, width, height);\n ctx.restore();\n }\n }\n};\nvar _default = Layer;\nmodule.exports = _default;","var util = require(\"./core/util\");\n\nvar env = require(\"./core/env\");\n\nvar Group = require(\"./container/Group\");\n\nvar timsort = require(\"./core/timsort\");\n\n// Use timsort because in most case elements are partially sorted\n// https://jsfiddle.net/pissang/jr4x7mdm/8/\nfunction shapeCompareFunc(a, b) {\n if (a.zlevel === b.zlevel) {\n if (a.z === b.z) {\n // if (a.z2 === b.z2) {\n // // FIXME Slow has renderidx compare\n // // http://stackoverflow.com/questions/20883421/sorting-in-javascript-should-every-compare-function-have-a-return-0-statement\n // // https://github.com/v8/v8/blob/47cce544a31ed5577ffe2963f67acb4144ee0232/src/js/array.js#L1012\n // return a.__renderidx - b.__renderidx;\n // }\n return a.z2 - b.z2;\n }\n\n return a.z - b.z;\n }\n\n return a.zlevel - b.zlevel;\n}\n/**\n * 内容仓库 (M)\n * @alias module:zrender/Storage\n * @constructor\n */\n\n\nvar Storage = function () {\n // jshint ignore:line\n this._roots = [];\n this._displayList = [];\n this._displayListLen = 0;\n};\n\nStorage.prototype = {\n constructor: Storage,\n\n /**\n * @param {Function} cb\n *\n */\n traverse: function (cb, context) {\n for (var i = 0; i < this._roots.length; i++) {\n this._roots[i].traverse(cb, context);\n }\n },\n\n /**\n * 返回所有图形的绘制队列\n * @param {boolean} [update=false] 是否在返回前更新该数组\n * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组, 在 update 为 true 的时候有效\n *\n * 详见{@link module:zrender/graphic/Displayable.prototype.updateDisplayList}\n * @return {Array.}\n */\n getDisplayList: function (update, includeIgnore) {\n includeIgnore = includeIgnore || false;\n\n if (update) {\n this.updateDisplayList(includeIgnore);\n }\n\n return this._displayList;\n },\n\n /**\n * 更新图形的绘制队列。\n * 每次绘制前都会调用,该方法会先深度优先遍历整个树,更新所有Group和Shape的变换并且把所有可见的Shape保存到数组中,\n * 最后根据绘制的优先级(zlevel > z > 插入顺序)排序得到绘制队列\n * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组\n */\n updateDisplayList: function (includeIgnore) {\n this._displayListLen = 0;\n var roots = this._roots;\n var displayList = this._displayList;\n\n for (var i = 0, len = roots.length; i < len; i++) {\n this._updateAndAddDisplayable(roots[i], null, includeIgnore);\n }\n\n displayList.length = this._displayListLen;\n env.canvasSupported && timsort(displayList, shapeCompareFunc);\n },\n _updateAndAddDisplayable: function (el, clipPaths, includeIgnore) {\n if (el.ignore && !includeIgnore) {\n return;\n }\n\n el.beforeUpdate();\n\n if (el.__dirty) {\n el.update();\n }\n\n el.afterUpdate();\n var userSetClipPath = el.clipPath;\n\n if (userSetClipPath) {\n // FIXME 效率影响\n if (clipPaths) {\n clipPaths = clipPaths.slice();\n } else {\n clipPaths = [];\n }\n\n var currentClipPath = userSetClipPath;\n var parentClipPath = el; // Recursively add clip path\n\n while (currentClipPath) {\n // clipPath 的变换是基于使用这个 clipPath 的元素\n currentClipPath.parent = parentClipPath;\n currentClipPath.updateTransform();\n clipPaths.push(currentClipPath);\n parentClipPath = currentClipPath;\n currentClipPath = currentClipPath.clipPath;\n }\n }\n\n if (el.isGroup) {\n var children = el._children;\n\n for (var i = 0; i < children.length; i++) {\n var child = children[i]; // Force to mark as dirty if group is dirty\n // FIXME __dirtyPath ?\n\n if (el.__dirty) {\n child.__dirty = true;\n }\n\n this._updateAndAddDisplayable(child, clipPaths, includeIgnore);\n } // Mark group clean here\n\n\n el.__dirty = false;\n } else {\n el.__clipPaths = clipPaths;\n this._displayList[this._displayListLen++] = el;\n }\n },\n\n /**\n * 添加图形(Shape)或者组(Group)到根节点\n * @param {module:zrender/Element} el\n */\n addRoot: function (el) {\n if (el.__storage === this) {\n return;\n }\n\n if (el instanceof Group) {\n el.addChildrenToStorage(this);\n }\n\n this.addToStorage(el);\n\n this._roots.push(el);\n },\n\n /**\n * 删除指定的图形(Shape)或者组(Group)\n * @param {string|Array.} [el] 如果为空清空整个Storage\n */\n delRoot: function (el) {\n if (el == null) {\n // 不指定el清空\n for (var i = 0; i < this._roots.length; i++) {\n var root = this._roots[i];\n\n if (root instanceof Group) {\n root.delChildrenFromStorage(this);\n }\n }\n\n this._roots = [];\n this._displayList = [];\n this._displayListLen = 0;\n return;\n }\n\n if (el instanceof Array) {\n for (var i = 0, l = el.length; i < l; i++) {\n this.delRoot(el[i]);\n }\n\n return;\n }\n\n var idx = util.indexOf(this._roots, el);\n\n if (idx >= 0) {\n this.delFromStorage(el);\n\n this._roots.splice(idx, 1);\n\n if (el instanceof Group) {\n el.delChildrenFromStorage(this);\n }\n }\n },\n addToStorage: function (el) {\n if (el) {\n el.__storage = this;\n el.dirty(false);\n }\n\n return this;\n },\n delFromStorage: function (el) {\n if (el) {\n el.__storage = null;\n }\n\n return this;\n },\n\n /**\n * 清空并且释放Storage\n */\n dispose: function () {\n this._renderList = this._roots = null;\n },\n displayableSortFunc: shapeCompareFunc\n};\nvar _default = Storage;\nmodule.exports = _default;","var _config = require(\"./config\");\n\nvar devicePixelRatio = _config.devicePixelRatio;\n\nvar util = require(\"./core/util\");\n\nvar logError = require(\"./core/log\");\n\nvar BoundingRect = require(\"./core/BoundingRect\");\n\nvar timsort = require(\"./core/timsort\");\n\nvar Layer = require(\"./Layer\");\n\nvar requestAnimationFrame = require(\"./animation/requestAnimationFrame\");\n\nvar Image = require(\"./graphic/Image\");\n\nvar env = require(\"./core/env\");\n\nvar HOVER_LAYER_ZLEVEL = 1e5;\nvar CANVAS_ZLEVEL = 314159;\nvar EL_AFTER_INCREMENTAL_INC = 0.01;\nvar INCREMENTAL_INC = 0.001;\n\nfunction parseInt10(val) {\n return parseInt(val, 10);\n}\n\nfunction isLayerValid(layer) {\n if (!layer) {\n return false;\n }\n\n if (layer.__builtin__) {\n return true;\n }\n\n if (typeof layer.resize !== 'function' || typeof layer.refresh !== 'function') {\n return false;\n }\n\n return true;\n}\n\nvar tmpRect = new BoundingRect(0, 0, 0, 0);\nvar viewRect = new BoundingRect(0, 0, 0, 0);\n\nfunction isDisplayableCulled(el, width, height) {\n tmpRect.copy(el.getBoundingRect());\n\n if (el.transform) {\n tmpRect.applyTransform(el.transform);\n }\n\n viewRect.width = width;\n viewRect.height = height;\n return !tmpRect.intersect(viewRect);\n}\n\nfunction isClipPathChanged(clipPaths, prevClipPaths) {\n // displayable.__clipPaths can only be `null`/`undefined` or an non-empty array.\n if (clipPaths === prevClipPaths) {\n return false;\n }\n\n if (!clipPaths || !prevClipPaths || clipPaths.length !== prevClipPaths.length) {\n return true;\n }\n\n for (var i = 0; i < clipPaths.length; i++) {\n if (clipPaths[i] !== prevClipPaths[i]) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction doClip(clipPaths, ctx) {\n for (var i = 0; i < clipPaths.length; i++) {\n var clipPath = clipPaths[i];\n clipPath.setTransform(ctx);\n ctx.beginPath();\n clipPath.buildPath(ctx, clipPath.shape);\n ctx.clip(); // Transform back\n\n clipPath.restoreTransform(ctx);\n }\n}\n\nfunction createRoot(width, height) {\n var domRoot = document.createElement('div'); // domRoot.onselectstart = returnFalse; // Avoid page selected\n\n domRoot.style.cssText = ['position:relative', // IOS13 safari probably has a compositing bug (z order of the canvas and the consequent\n // dom does not act as expected) when some of the parent dom has\n // `-webkit-overflow-scrolling: touch;` and the webpage is longer than one screen and\n // the canvas is not at the top part of the page.\n // Check `https://bugs.webkit.org/show_bug.cgi?id=203681` for more details. We remove\n // this `overflow:hidden` to avoid the bug.\n // 'overflow:hidden',\n 'width:' + width + 'px', 'height:' + height + 'px', 'padding:0', 'margin:0', 'border-width:0'].join(';') + ';';\n return domRoot;\n}\n/**\n * @alias module:zrender/Painter\n * @constructor\n * @param {HTMLElement} root 绘图容器\n * @param {module:zrender/Storage} storage\n * @param {Object} opts\n */\n\n\nvar Painter = function (root, storage, opts) {\n this.type = 'canvas'; // In node environment using node-canvas\n\n var singleCanvas = !root.nodeName // In node ?\n || root.nodeName.toUpperCase() === 'CANVAS';\n this._opts = opts = util.extend({}, opts || {});\n /**\n * @type {number}\n */\n\n this.dpr = opts.devicePixelRatio || devicePixelRatio;\n /**\n * @type {boolean}\n * @private\n */\n\n this._singleCanvas = singleCanvas;\n /**\n * 绘图容器\n * @type {HTMLElement}\n */\n\n this.root = root;\n var rootStyle = root.style;\n\n if (rootStyle) {\n rootStyle['-webkit-tap-highlight-color'] = 'transparent';\n rootStyle['-webkit-user-select'] = rootStyle['user-select'] = rootStyle['-webkit-touch-callout'] = 'none';\n root.innerHTML = '';\n }\n /**\n * @type {module:zrender/Storage}\n */\n\n\n this.storage = storage;\n /**\n * @type {Array.}\n * @private\n */\n\n var zlevelList = this._zlevelList = [];\n /**\n * @type {Object.}\n * @private\n */\n\n var layers = this._layers = {};\n /**\n * @type {Object.}\n * @private\n */\n\n this._layerConfig = {};\n /**\n * zrender will do compositing when root is a canvas and have multiple zlevels.\n */\n\n this._needsManuallyCompositing = false;\n\n if (!singleCanvas) {\n this._width = this._getSize(0);\n this._height = this._getSize(1);\n var domRoot = this._domRoot = createRoot(this._width, this._height);\n root.appendChild(domRoot);\n } else {\n var width = root.width;\n var height = root.height;\n\n if (opts.width != null) {\n width = opts.width;\n }\n\n if (opts.height != null) {\n height = opts.height;\n }\n\n this.dpr = opts.devicePixelRatio || 1; // Use canvas width and height directly\n\n root.width = width * this.dpr;\n root.height = height * this.dpr;\n this._width = width;\n this._height = height; // Create layer if only one given canvas\n // Device can be specified to create a high dpi image.\n\n var mainLayer = new Layer(root, this, this.dpr);\n mainLayer.__builtin__ = true;\n mainLayer.initContext(); // FIXME Use canvas width and height\n // mainLayer.resize(width, height);\n\n layers[CANVAS_ZLEVEL] = mainLayer;\n mainLayer.zlevel = CANVAS_ZLEVEL; // Not use common zlevel.\n\n zlevelList.push(CANVAS_ZLEVEL);\n this._domRoot = root;\n }\n /**\n * @type {module:zrender/Layer}\n * @private\n */\n\n\n this._hoverlayer = null;\n this._hoverElements = [];\n};\n\nPainter.prototype = {\n constructor: Painter,\n getType: function () {\n return 'canvas';\n },\n\n /**\n * If painter use a single canvas\n * @return {boolean}\n */\n isSingleCanvas: function () {\n return this._singleCanvas;\n },\n\n /**\n * @return {HTMLDivElement}\n */\n getViewportRoot: function () {\n return this._domRoot;\n },\n getViewportRootOffset: function () {\n var viewportRoot = this.getViewportRoot();\n\n if (viewportRoot) {\n return {\n offsetLeft: viewportRoot.offsetLeft || 0,\n offsetTop: viewportRoot.offsetTop || 0\n };\n }\n },\n\n /**\n * 刷新\n * @param {boolean} [paintAll=false] 强制绘制所有displayable\n */\n refresh: function (paintAll) {\n var list = this.storage.getDisplayList(true);\n var zlevelList = this._zlevelList;\n this._redrawId = Math.random();\n\n this._paintList(list, paintAll, this._redrawId); // Paint custum layers\n\n\n for (var i = 0; i < zlevelList.length; i++) {\n var z = zlevelList[i];\n var layer = this._layers[z];\n\n if (!layer.__builtin__ && layer.refresh) {\n var clearColor = i === 0 ? this._backgroundColor : null;\n layer.refresh(clearColor);\n }\n }\n\n this.refreshHover();\n return this;\n },\n addHover: function (el, hoverStyle) {\n if (el.__hoverMir) {\n return;\n }\n\n var elMirror = new el.constructor({\n style: el.style,\n shape: el.shape,\n z: el.z,\n z2: el.z2,\n silent: el.silent\n });\n elMirror.__from = el;\n el.__hoverMir = elMirror;\n hoverStyle && elMirror.setStyle(hoverStyle);\n\n this._hoverElements.push(elMirror);\n\n return elMirror;\n },\n removeHover: function (el) {\n var elMirror = el.__hoverMir;\n var hoverElements = this._hoverElements;\n var idx = util.indexOf(hoverElements, elMirror);\n\n if (idx >= 0) {\n hoverElements.splice(idx, 1);\n }\n\n el.__hoverMir = null;\n },\n clearHover: function (el) {\n var hoverElements = this._hoverElements;\n\n for (var i = 0; i < hoverElements.length; i++) {\n var from = hoverElements[i].__from;\n\n if (from) {\n from.__hoverMir = null;\n }\n }\n\n hoverElements.length = 0;\n },\n refreshHover: function () {\n var hoverElements = this._hoverElements;\n var len = hoverElements.length;\n var hoverLayer = this._hoverlayer;\n hoverLayer && hoverLayer.clear();\n\n if (!len) {\n return;\n }\n\n timsort(hoverElements, this.storage.displayableSortFunc); // Use a extream large zlevel\n // FIXME?\n\n if (!hoverLayer) {\n hoverLayer = this._hoverlayer = this.getLayer(HOVER_LAYER_ZLEVEL);\n }\n\n var scope = {};\n hoverLayer.ctx.save();\n\n for (var i = 0; i < len;) {\n var el = hoverElements[i];\n var originalEl = el.__from; // Original el is removed\n // PENDING\n\n if (!(originalEl && originalEl.__zr)) {\n hoverElements.splice(i, 1);\n originalEl.__hoverMir = null;\n len--;\n continue;\n }\n\n i++; // Use transform\n // FIXME style and shape ?\n\n if (!originalEl.invisible) {\n el.transform = originalEl.transform;\n el.invTransform = originalEl.invTransform;\n el.__clipPaths = originalEl.__clipPaths; // el.\n\n this._doPaintEl(el, hoverLayer, true, scope);\n }\n }\n\n hoverLayer.ctx.restore();\n },\n getHoverLayer: function () {\n return this.getLayer(HOVER_LAYER_ZLEVEL);\n },\n _paintList: function (list, paintAll, redrawId) {\n if (this._redrawId !== redrawId) {\n return;\n }\n\n paintAll = paintAll || false;\n\n this._updateLayerStatus(list);\n\n var finished = this._doPaintList(list, paintAll);\n\n if (this._needsManuallyCompositing) {\n this._compositeManually();\n }\n\n if (!finished) {\n var self = this;\n requestAnimationFrame(function () {\n self._paintList(list, paintAll, redrawId);\n });\n }\n },\n _compositeManually: function () {\n var ctx = this.getLayer(CANVAS_ZLEVEL).ctx;\n var width = this._domRoot.width;\n var height = this._domRoot.height;\n ctx.clearRect(0, 0, width, height); // PENDING, If only builtin layer?\n\n this.eachBuiltinLayer(function (layer) {\n if (layer.virtual) {\n ctx.drawImage(layer.dom, 0, 0, width, height);\n }\n });\n },\n _doPaintList: function (list, paintAll) {\n var layerList = [];\n\n for (var zi = 0; zi < this._zlevelList.length; zi++) {\n var zlevel = this._zlevelList[zi];\n var layer = this._layers[zlevel];\n\n if (layer.__builtin__ && layer !== this._hoverlayer && (layer.__dirty || paintAll)) {\n layerList.push(layer);\n }\n }\n\n var finished = true;\n\n for (var k = 0; k < layerList.length; k++) {\n var layer = layerList[k];\n var ctx = layer.ctx;\n var scope = {};\n ctx.save();\n var start = paintAll ? layer.__startIndex : layer.__drawIndex;\n var useTimer = !paintAll && layer.incremental && Date.now;\n var startTime = useTimer && Date.now();\n var clearColor = layer.zlevel === this._zlevelList[0] ? this._backgroundColor : null; // All elements in this layer are cleared.\n\n if (layer.__startIndex === layer.__endIndex) {\n layer.clear(false, clearColor);\n } else if (start === layer.__startIndex) {\n var firstEl = list[start];\n\n if (!firstEl.incremental || !firstEl.notClear || paintAll) {\n layer.clear(false, clearColor);\n }\n }\n\n if (start === -1) {\n console.error('For some unknown reason. drawIndex is -1');\n start = layer.__startIndex;\n }\n\n for (var i = start; i < layer.__endIndex; i++) {\n var el = list[i];\n\n this._doPaintEl(el, layer, paintAll, scope);\n\n el.__dirty = el.__dirtyText = false;\n\n if (useTimer) {\n // Date.now can be executed in 13,025,305 ops/second.\n var dTime = Date.now() - startTime; // Give 15 millisecond to draw.\n // The rest elements will be drawn in the next frame.\n\n if (dTime > 15) {\n break;\n }\n }\n }\n\n layer.__drawIndex = i;\n\n if (layer.__drawIndex < layer.__endIndex) {\n finished = false;\n }\n\n if (scope.prevElClipPaths) {\n // Needs restore the state. If last drawn element is in the clipping area.\n ctx.restore();\n }\n\n ctx.restore();\n }\n\n if (env.wxa) {\n // Flush for weixin application\n util.each(this._layers, function (layer) {\n if (layer && layer.ctx && layer.ctx.draw) {\n layer.ctx.draw();\n }\n });\n }\n\n return finished;\n },\n _doPaintEl: function (el, currentLayer, forcePaint, scope) {\n var ctx = currentLayer.ctx;\n var m = el.transform;\n\n if ((currentLayer.__dirty || forcePaint) && // Ignore invisible element\n !el.invisible // Ignore transparent element\n && el.style.opacity !== 0 // Ignore scale 0 element, in some environment like node-canvas\n // Draw a scale 0 element can cause all following draw wrong\n // And setTransform with scale 0 will cause set back transform failed.\n && !(m && !m[0] && !m[3]) // Ignore culled element\n && !(el.culling && isDisplayableCulled(el, this._width, this._height))) {\n var clipPaths = el.__clipPaths;\n var prevElClipPaths = scope.prevElClipPaths; // Optimize when clipping on group with several elements\n\n if (!prevElClipPaths || isClipPathChanged(clipPaths, prevElClipPaths)) {\n // If has previous clipping state, restore from it\n if (prevElClipPaths) {\n ctx.restore();\n scope.prevElClipPaths = null; // Reset prevEl since context has been restored\n\n scope.prevEl = null;\n } // New clipping state\n\n\n if (clipPaths) {\n ctx.save();\n doClip(clipPaths, ctx);\n scope.prevElClipPaths = clipPaths;\n }\n }\n\n el.beforeBrush && el.beforeBrush(ctx);\n el.brush(ctx, scope.prevEl || null);\n scope.prevEl = el;\n el.afterBrush && el.afterBrush(ctx);\n }\n },\n\n /**\n * 获取 zlevel 所在层,如果不存在则会创建一个新的层\n * @param {number} zlevel\n * @param {boolean} virtual Virtual layer will not be inserted into dom.\n * @return {module:zrender/Layer}\n */\n getLayer: function (zlevel, virtual) {\n if (this._singleCanvas && !this._needsManuallyCompositing) {\n zlevel = CANVAS_ZLEVEL;\n }\n\n var layer = this._layers[zlevel];\n\n if (!layer) {\n // Create a new layer\n layer = new Layer('zr_' + zlevel, this, this.dpr);\n layer.zlevel = zlevel;\n layer.__builtin__ = true;\n\n if (this._layerConfig[zlevel]) {\n util.merge(layer, this._layerConfig[zlevel], true);\n } // TODO Remove EL_AFTER_INCREMENTAL_INC magic number\n else if (this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC]) {\n util.merge(layer, this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC], true);\n }\n\n if (virtual) {\n layer.virtual = virtual;\n }\n\n this.insertLayer(zlevel, layer); // Context is created after dom inserted to document\n // Or excanvas will get 0px clientWidth and clientHeight\n\n layer.initContext();\n }\n\n return layer;\n },\n insertLayer: function (zlevel, layer) {\n var layersMap = this._layers;\n var zlevelList = this._zlevelList;\n var len = zlevelList.length;\n var prevLayer = null;\n var i = -1;\n var domRoot = this._domRoot;\n\n if (layersMap[zlevel]) {\n logError('ZLevel ' + zlevel + ' has been used already');\n return;\n } // Check if is a valid layer\n\n\n if (!isLayerValid(layer)) {\n logError('Layer of zlevel ' + zlevel + ' is not valid');\n return;\n }\n\n if (len > 0 && zlevel > zlevelList[0]) {\n for (i = 0; i < len - 1; i++) {\n if (zlevelList[i] < zlevel && zlevelList[i + 1] > zlevel) {\n break;\n }\n }\n\n prevLayer = layersMap[zlevelList[i]];\n }\n\n zlevelList.splice(i + 1, 0, zlevel);\n layersMap[zlevel] = layer; // Vitual layer will not directly show on the screen.\n // (It can be a WebGL layer and assigned to a ZImage element)\n // But it still under management of zrender.\n\n if (!layer.virtual) {\n if (prevLayer) {\n var prevDom = prevLayer.dom;\n\n if (prevDom.nextSibling) {\n domRoot.insertBefore(layer.dom, prevDom.nextSibling);\n } else {\n domRoot.appendChild(layer.dom);\n }\n } else {\n if (domRoot.firstChild) {\n domRoot.insertBefore(layer.dom, domRoot.firstChild);\n } else {\n domRoot.appendChild(layer.dom);\n }\n }\n }\n },\n // Iterate each layer\n eachLayer: function (cb, context) {\n var zlevelList = this._zlevelList;\n var z;\n var i;\n\n for (i = 0; i < zlevelList.length; i++) {\n z = zlevelList[i];\n cb.call(context, this._layers[z], z);\n }\n },\n // Iterate each buildin layer\n eachBuiltinLayer: function (cb, context) {\n var zlevelList = this._zlevelList;\n var layer;\n var z;\n var i;\n\n for (i = 0; i < zlevelList.length; i++) {\n z = zlevelList[i];\n layer = this._layers[z];\n\n if (layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n },\n // Iterate each other layer except buildin layer\n eachOtherLayer: function (cb, context) {\n var zlevelList = this._zlevelList;\n var layer;\n var z;\n var i;\n\n for (i = 0; i < zlevelList.length; i++) {\n z = zlevelList[i];\n layer = this._layers[z];\n\n if (!layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n },\n\n /**\n * 获取所有已创建的层\n * @param {Array.} [prevLayer]\n */\n getLayers: function () {\n return this._layers;\n },\n _updateLayerStatus: function (list) {\n this.eachBuiltinLayer(function (layer, z) {\n layer.__dirty = layer.__used = false;\n });\n\n function updatePrevLayer(idx) {\n if (prevLayer) {\n if (prevLayer.__endIndex !== idx) {\n prevLayer.__dirty = true;\n }\n\n prevLayer.__endIndex = idx;\n }\n }\n\n if (this._singleCanvas) {\n for (var i = 1; i < list.length; i++) {\n var el = list[i];\n\n if (el.zlevel !== list[i - 1].zlevel || el.incremental) {\n this._needsManuallyCompositing = true;\n break;\n }\n }\n }\n\n var prevLayer = null;\n var incrementalLayerCount = 0;\n var prevZlevel;\n\n for (var i = 0; i < list.length; i++) {\n var el = list[i];\n var zlevel = el.zlevel;\n var layer;\n\n if (prevZlevel !== zlevel) {\n prevZlevel = zlevel;\n incrementalLayerCount = 0;\n } // TODO Not use magic number on zlevel.\n // Each layer with increment element can be separated to 3 layers.\n // (Other Element drawn after incremental element)\n // -----------------zlevel + EL_AFTER_INCREMENTAL_INC--------------------\n // (Incremental element)\n // ----------------------zlevel + INCREMENTAL_INC------------------------\n // (Element drawn before incremental element)\n // --------------------------------zlevel--------------------------------\n\n\n if (el.incremental) {\n layer = this.getLayer(zlevel + INCREMENTAL_INC, this._needsManuallyCompositing);\n layer.incremental = true;\n incrementalLayerCount = 1;\n } else {\n layer = this.getLayer(zlevel + (incrementalLayerCount > 0 ? EL_AFTER_INCREMENTAL_INC : 0), this._needsManuallyCompositing);\n }\n\n if (!layer.__builtin__) {\n logError('ZLevel ' + zlevel + ' has been used by unkown layer ' + layer.id);\n }\n\n if (layer !== prevLayer) {\n layer.__used = true;\n\n if (layer.__startIndex !== i) {\n layer.__dirty = true;\n }\n\n layer.__startIndex = i;\n\n if (!layer.incremental) {\n layer.__drawIndex = i;\n } else {\n // Mark layer draw index needs to update.\n layer.__drawIndex = -1;\n }\n\n updatePrevLayer(i);\n prevLayer = layer;\n }\n\n if (el.__dirty) {\n layer.__dirty = true;\n\n if (layer.incremental && layer.__drawIndex < 0) {\n // Start draw from the first dirty element.\n layer.__drawIndex = i;\n }\n }\n }\n\n updatePrevLayer(i);\n this.eachBuiltinLayer(function (layer, z) {\n // Used in last frame but not in this frame. Needs clear\n if (!layer.__used && layer.getElementCount() > 0) {\n layer.__dirty = true;\n layer.__startIndex = layer.__endIndex = layer.__drawIndex = 0;\n } // For incremental layer. In case start index changed and no elements are dirty.\n\n\n if (layer.__dirty && layer.__drawIndex < 0) {\n layer.__drawIndex = layer.__startIndex;\n }\n });\n },\n\n /**\n * 清除hover层外所有内容\n */\n clear: function () {\n this.eachBuiltinLayer(this._clearLayer);\n return this;\n },\n _clearLayer: function (layer) {\n layer.clear();\n },\n setBackgroundColor: function (backgroundColor) {\n this._backgroundColor = backgroundColor;\n },\n\n /**\n * 修改指定zlevel的绘制参数\n *\n * @param {string} zlevel\n * @param {Object} config 配置对象\n * @param {string} [config.clearColor=0] 每次清空画布的颜色\n * @param {string} [config.motionBlur=false] 是否开启动态模糊\n * @param {number} [config.lastFrameAlpha=0.7]\n * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n */\n configLayer: function (zlevel, config) {\n if (config) {\n var layerConfig = this._layerConfig;\n\n if (!layerConfig[zlevel]) {\n layerConfig[zlevel] = config;\n } else {\n util.merge(layerConfig[zlevel], config, true);\n }\n\n for (var i = 0; i < this._zlevelList.length; i++) {\n var _zlevel = this._zlevelList[i]; // TODO Remove EL_AFTER_INCREMENTAL_INC magic number\n\n if (_zlevel === zlevel || _zlevel === zlevel + EL_AFTER_INCREMENTAL_INC) {\n var layer = this._layers[_zlevel];\n util.merge(layer, layerConfig[zlevel], true);\n }\n }\n }\n },\n\n /**\n * 删除指定层\n * @param {number} zlevel 层所在的zlevel\n */\n delLayer: function (zlevel) {\n var layers = this._layers;\n var zlevelList = this._zlevelList;\n var layer = layers[zlevel];\n\n if (!layer) {\n return;\n }\n\n layer.dom.parentNode.removeChild(layer.dom);\n delete layers[zlevel];\n zlevelList.splice(util.indexOf(zlevelList, zlevel), 1);\n },\n\n /**\n * 区域大小变化后重绘\n */\n resize: function (width, height) {\n if (!this._domRoot.style) {\n // Maybe in node or worker\n if (width == null || height == null) {\n return;\n }\n\n this._width = width;\n this._height = height;\n this.getLayer(CANVAS_ZLEVEL).resize(width, height);\n } else {\n var domRoot = this._domRoot; // FIXME Why ?\n\n domRoot.style.display = 'none'; // Save input w/h\n\n var opts = this._opts;\n width != null && (opts.width = width);\n height != null && (opts.height = height);\n width = this._getSize(0);\n height = this._getSize(1);\n domRoot.style.display = ''; // 优化没有实际改变的resize\n\n if (this._width !== width || height !== this._height) {\n domRoot.style.width = width + 'px';\n domRoot.style.height = height + 'px';\n\n for (var id in this._layers) {\n if (this._layers.hasOwnProperty(id)) {\n this._layers[id].resize(width, height);\n }\n }\n\n util.each(this._progressiveLayers, function (layer) {\n layer.resize(width, height);\n });\n this.refresh(true);\n }\n\n this._width = width;\n this._height = height;\n }\n\n return this;\n },\n\n /**\n * 清除单独的一个层\n * @param {number} zlevel\n */\n clearLayer: function (zlevel) {\n var layer = this._layers[zlevel];\n\n if (layer) {\n layer.clear();\n }\n },\n\n /**\n * 释放\n */\n dispose: function () {\n this.root.innerHTML = '';\n this.root = this.storage = this._domRoot = this._layers = null;\n },\n\n /**\n * Get canvas which has all thing rendered\n * @param {Object} opts\n * @param {string} [opts.backgroundColor]\n * @param {number} [opts.pixelRatio]\n */\n getRenderedCanvas: function (opts) {\n opts = opts || {};\n\n if (this._singleCanvas && !this._compositeManually) {\n return this._layers[CANVAS_ZLEVEL].dom;\n }\n\n var imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr);\n imageLayer.initContext();\n imageLayer.clear(false, opts.backgroundColor || this._backgroundColor);\n\n if (opts.pixelRatio <= this.dpr) {\n this.refresh();\n var width = imageLayer.dom.width;\n var height = imageLayer.dom.height;\n var ctx = imageLayer.ctx;\n this.eachLayer(function (layer) {\n if (layer.__builtin__) {\n ctx.drawImage(layer.dom, 0, 0, width, height);\n } else if (layer.renderToCanvas) {\n imageLayer.ctx.save();\n layer.renderToCanvas(imageLayer.ctx);\n imageLayer.ctx.restore();\n }\n });\n } else {\n // PENDING, echarts-gl and incremental rendering.\n var scope = {};\n var displayList = this.storage.getDisplayList(true);\n\n for (var i = 0; i < displayList.length; i++) {\n var el = displayList[i];\n\n this._doPaintEl(el, imageLayer, true, scope);\n }\n }\n\n return imageLayer.dom;\n },\n\n /**\n * 获取绘图区域宽度\n */\n getWidth: function () {\n return this._width;\n },\n\n /**\n * 获取绘图区域高度\n */\n getHeight: function () {\n return this._height;\n },\n _getSize: function (whIdx) {\n var opts = this._opts;\n var wh = ['width', 'height'][whIdx];\n var cwh = ['clientWidth', 'clientHeight'][whIdx];\n var plt = ['paddingLeft', 'paddingTop'][whIdx];\n var prb = ['paddingRight', 'paddingBottom'][whIdx];\n\n if (opts[wh] != null && opts[wh] !== 'auto') {\n return parseFloat(opts[wh]);\n }\n\n var root = this.root; // IE8 does not support getComputedStyle, but it use VML.\n\n var stl = document.defaultView.getComputedStyle(root);\n return (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh])) - (parseInt10(stl[plt]) || 0) - (parseInt10(stl[prb]) || 0) | 0;\n },\n pathToImage: function (path, dpr) {\n dpr = dpr || this.dpr;\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n var rect = path.getBoundingRect();\n var style = path.style;\n var shadowBlurSize = style.shadowBlur * dpr;\n var shadowOffsetX = style.shadowOffsetX * dpr;\n var shadowOffsetY = style.shadowOffsetY * dpr;\n var lineWidth = style.hasStroke() ? style.lineWidth : 0;\n var leftMargin = Math.max(lineWidth / 2, -shadowOffsetX + shadowBlurSize);\n var rightMargin = Math.max(lineWidth / 2, shadowOffsetX + shadowBlurSize);\n var topMargin = Math.max(lineWidth / 2, -shadowOffsetY + shadowBlurSize);\n var bottomMargin = Math.max(lineWidth / 2, shadowOffsetY + shadowBlurSize);\n var width = rect.width + leftMargin + rightMargin;\n var height = rect.height + topMargin + bottomMargin;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n ctx.scale(dpr, dpr);\n ctx.clearRect(0, 0, width, height);\n ctx.dpr = dpr;\n var pathTransform = {\n position: path.position,\n rotation: path.rotation,\n scale: path.scale\n };\n path.position = [leftMargin - rect.x, topMargin - rect.y];\n path.rotation = 0;\n path.scale = [1, 1];\n path.updateTransform();\n\n if (path) {\n path.brush(ctx);\n }\n\n var ImageShape = Image;\n var imgShape = new ImageShape({\n style: {\n x: 0,\n y: 0,\n image: canvas\n }\n });\n\n if (pathTransform.position != null) {\n imgShape.position = path.position = pathTransform.position;\n }\n\n if (pathTransform.rotation != null) {\n imgShape.rotation = path.rotation = pathTransform.rotation;\n }\n\n if (pathTransform.scale != null) {\n imgShape.scale = path.scale = pathTransform.scale;\n }\n\n return imgShape;\n }\n};\nvar _default = Painter;\nmodule.exports = _default;"],"sourceRoot":""}