UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

181 lines (180 loc) 5.8 kB
import "../../echarts/lib/echarts.mjs"; import LayerGL from "./core/LayerGL.mjs"; import backwardCompat from "./preprocessor/backwardCompat.mjs"; import { registerPostInit, registerPostUpdate, registerPreprocessor } from "../../echarts/lib/core/echarts.mjs"; import ZRImage from "../../zrender/lib/graphic/Image.mjs"; function EChartsGL(zr) { this._layers = {}; this._zr = zr; } EChartsGL.prototype.update = function(ecModel, api) { var self = this; var zr = api.getZr(); if (!zr.getWidth() || !zr.getHeight()) { console.warn("Dom has no width or height"); return; } function getLayerGL(model) { zr.setSleepAfterStill(0); var zlevel2; if (model.coordinateSystem && model.coordinateSystem.model) { zlevel2 = model.get("zlevel"); } else { zlevel2 = model.get("zlevel"); } var layers = self._layers; var layerGL = layers[zlevel2]; if (!layerGL) { layerGL = layers[zlevel2] = new LayerGL("gl-" + zlevel2, zr); if (zr.painter.isSingleCanvas()) { layerGL.virtual = true; var img = new ZRImage({ z: 1e4, style: { image: layerGL.renderer.canvas }, silent: true }); layerGL.__hostImage = img; zr.add(img); } zr.painter.insertLayer(zlevel2, layerGL); } if (layerGL.__hostImage) { layerGL.__hostImage.setStyle({ width: layerGL.renderer.getWidth(), height: layerGL.renderer.getHeight() }); } return layerGL; } function setSilent(groupGL, silent) { if (groupGL) { groupGL.traverse(function(mesh) { if (mesh.isRenderable && mesh.isRenderable()) { mesh.ignorePicking = mesh.$ignorePicking != null ? mesh.$ignorePicking : silent; } }); } } for (var zlevel in this._layers) { this._layers[zlevel].removeViewsAll(); } ecModel.eachComponent(function(componentType, componentModel) { if (componentType !== "series") { var view = api.getViewOfComponentModel(componentModel); var coordSys = componentModel.coordinateSystem; if (view.__ecgl__) { var viewGL; if (coordSys) { if (!coordSys.viewGL) { console.error("Can't find viewGL in coordinateSystem of component " + componentModel.id); return; } viewGL = coordSys.viewGL; } else { if (!componentModel.viewGL) { console.error("Can't find viewGL of component " + componentModel.id); return; } viewGL = coordSys.viewGL; } var viewGL = coordSys.viewGL; var layerGL = getLayerGL(componentModel); layerGL.addView(viewGL); view.afterRender && view.afterRender(componentModel, ecModel, api, layerGL); setSilent(view.groupGL, componentModel.get("silent")); } } }); ecModel.eachSeries(function(seriesModel) { var chartView = api.getViewOfSeriesModel(seriesModel); var coordSys = seriesModel.coordinateSystem; if (chartView.__ecgl__) { if (coordSys && !coordSys.viewGL && !chartView.viewGL) { console.error("Can't find viewGL of series " + chartView.id); return; } var viewGL = coordSys && coordSys.viewGL || chartView.viewGL; var layerGL = getLayerGL(seriesModel); layerGL.addView(viewGL); chartView.afterRender && chartView.afterRender(seriesModel, ecModel, api, layerGL); setSilent(chartView.groupGL, seriesModel.get("silent")); } }); }; registerPostInit(function(chart) { var zr = chart.getZr(); var oldDispose = zr.painter.dispose; zr.painter.dispose = function() { if (typeof this.eachOtherLayer === "function") { this.eachOtherLayer(function(layer) { if (layer instanceof LayerGL) { layer.dispose(); } }); } oldDispose.call(this); }; zr.painter.getRenderedCanvas = function(opts) { opts = opts || {}; if (this._singleCanvas) { return this._layers[0].dom; } var canvas = document.createElement("canvas"); var dpr = opts.pixelRatio || this.dpr; canvas.width = this.getWidth() * dpr; canvas.height = this.getHeight() * dpr; var ctx = canvas.getContext("2d"); ctx.dpr = dpr; ctx.clearRect(0, 0, canvas.width, canvas.height); if (opts.backgroundColor) { ctx.fillStyle = opts.backgroundColor; ctx.fillRect(0, 0, canvas.width, canvas.height); } var displayList = this.storage.getDisplayList(true); var scope = {}; var zlevel; var self = this; function findAndDrawOtherLayer(smaller, larger) { var zlevelList = self._zlevelList; if (smaller == null) { smaller = -Infinity; } var intermediateLayer; for (var i2 = 0; i2 < zlevelList.length; i2++) { var z = zlevelList[i2]; var layer2 = self._layers[z]; if (!layer2.__builtin__ && z > smaller && z < larger) { intermediateLayer = layer2; break; } } if (intermediateLayer && intermediateLayer.renderToCanvas) { ctx.save(); intermediateLayer.renderToCanvas(ctx); ctx.restore(); } } var layer = { ctx }; for (var i = 0; i < displayList.length; i++) { var el = displayList[i]; if (el.zlevel !== zlevel) { findAndDrawOtherLayer(zlevel, el.zlevel); zlevel = el.zlevel; } this._doPaintEl(el, layer, true, null, scope); } findAndDrawOtherLayer(zlevel, Infinity); return canvas; }; }); registerPostUpdate(function(ecModel, api) { var zr = api.getZr(); var egl = zr.__egl = zr.__egl || new EChartsGL(zr); egl.update(ecModel, api); }); registerPreprocessor(backwardCompat); export { EChartsGL as default };