UNPKG

cione-comp-lib

Version:

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

280 lines (279 loc) 9.21 kB
import { __extends } from "../../../../tslib/tslib.es6.mjs"; import { map } from "../../../../zrender/lib/core/util.mjs"; import ChartView from "../../view/Chart.mjs"; import { traverseElements } from "../../util/graphic.mjs"; import { setStatesStylesFromModel } from "../../util/states.mjs"; import Path from "../../../../zrender/lib/graphic/Path.mjs"; import { createClipPath } from "../helper/createClipPathFromCoordSys.mjs"; import { initProps, updateProps, saveOldStyle } from "../../animation/basicTransition.mjs"; var SKIP_PROPS = ["color", "borderColor"]; var CandlestickView = function(_super) { __extends(CandlestickView2, _super); function CandlestickView2() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = CandlestickView2.type; return _this; } CandlestickView2.prototype.render = function(seriesModel, ecModel, api) { this.group.removeClipPath(); this._progressiveEls = null; this._updateDrawMode(seriesModel); this._isLargeDraw ? this._renderLarge(seriesModel) : this._renderNormal(seriesModel); }; CandlestickView2.prototype.incrementalPrepareRender = function(seriesModel, ecModel, api) { this._clear(); this._updateDrawMode(seriesModel); }; CandlestickView2.prototype.incrementalRender = function(params, seriesModel, ecModel, api) { this._progressiveEls = []; this._isLargeDraw ? this._incrementalRenderLarge(params, seriesModel) : this._incrementalRenderNormal(params, seriesModel); }; CandlestickView2.prototype.eachRendered = function(cb) { traverseElements(this._progressiveEls || this.group, cb); }; CandlestickView2.prototype._updateDrawMode = function(seriesModel) { var isLargeDraw = seriesModel.pipelineContext.large; if (this._isLargeDraw == null || isLargeDraw !== this._isLargeDraw) { this._isLargeDraw = isLargeDraw; this._clear(); } }; CandlestickView2.prototype._renderNormal = function(seriesModel) { var data = seriesModel.getData(); var oldData = this._data; var group = this.group; var isSimpleBox = data.getLayout("isSimpleBox"); var needsClip = seriesModel.get("clip", true); var coord = seriesModel.coordinateSystem; var clipArea = coord.getArea && coord.getArea(); if (!this._data) { group.removeAll(); } data.diff(oldData).add(function(newIdx) { if (data.hasValue(newIdx)) { var itemLayout = data.getItemLayout(newIdx); if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) { return; } var el = createNormalBox(itemLayout, newIdx, true); initProps(el, { shape: { points: itemLayout.ends } }, seriesModel, newIdx); setBoxCommon(el, data, newIdx, isSimpleBox); group.add(el); data.setItemGraphicEl(newIdx, el); } }).update(function(newIdx, oldIdx) { var el = oldData.getItemGraphicEl(oldIdx); if (!data.hasValue(newIdx)) { group.remove(el); return; } var itemLayout = data.getItemLayout(newIdx); if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) { group.remove(el); return; } if (!el) { el = createNormalBox(itemLayout); } else { updateProps(el, { shape: { points: itemLayout.ends } }, seriesModel, newIdx); saveOldStyle(el); } setBoxCommon(el, data, newIdx, isSimpleBox); group.add(el); data.setItemGraphicEl(newIdx, el); }).remove(function(oldIdx) { var el = oldData.getItemGraphicEl(oldIdx); el && group.remove(el); }).execute(); this._data = data; }; CandlestickView2.prototype._renderLarge = function(seriesModel) { this._clear(); createLarge(seriesModel, this.group); var clipPath = seriesModel.get("clip", true) ? createClipPath(seriesModel.coordinateSystem, false, seriesModel) : null; if (clipPath) { this.group.setClipPath(clipPath); } else { this.group.removeClipPath(); } }; CandlestickView2.prototype._incrementalRenderNormal = function(params, seriesModel) { var data = seriesModel.getData(); var isSimpleBox = data.getLayout("isSimpleBox"); var dataIndex; while ((dataIndex = params.next()) != null) { var itemLayout = data.getItemLayout(dataIndex); var el = createNormalBox(itemLayout); setBoxCommon(el, data, dataIndex, isSimpleBox); el.incremental = true; this.group.add(el); this._progressiveEls.push(el); } }; CandlestickView2.prototype._incrementalRenderLarge = function(params, seriesModel) { createLarge(seriesModel, this.group, this._progressiveEls, true); }; CandlestickView2.prototype.remove = function(ecModel) { this._clear(); }; CandlestickView2.prototype._clear = function() { this.group.removeAll(); this._data = null; }; CandlestickView2.type = "candlestick"; return CandlestickView2; }(ChartView); var NormalBoxPathShape = function() { function NormalBoxPathShape2() { } return NormalBoxPathShape2; }(); var NormalBoxPath = function(_super) { __extends(NormalBoxPath2, _super); function NormalBoxPath2(opts) { var _this = _super.call(this, opts) || this; _this.type = "normalCandlestickBox"; return _this; } NormalBoxPath2.prototype.getDefaultShape = function() { return new NormalBoxPathShape(); }; NormalBoxPath2.prototype.buildPath = function(ctx, shape) { var ends = shape.points; if (this.__simpleBox) { ctx.moveTo(ends[4][0], ends[4][1]); ctx.lineTo(ends[6][0], ends[6][1]); } else { ctx.moveTo(ends[0][0], ends[0][1]); ctx.lineTo(ends[1][0], ends[1][1]); ctx.lineTo(ends[2][0], ends[2][1]); ctx.lineTo(ends[3][0], ends[3][1]); ctx.closePath(); ctx.moveTo(ends[4][0], ends[4][1]); ctx.lineTo(ends[5][0], ends[5][1]); ctx.moveTo(ends[6][0], ends[6][1]); ctx.lineTo(ends[7][0], ends[7][1]); } }; return NormalBoxPath2; }(Path); function createNormalBox(itemLayout, dataIndex, isInit) { var ends = itemLayout.ends; return new NormalBoxPath({ shape: { points: isInit ? transInit(ends, itemLayout) : ends }, z2: 100 }); } function isNormalBoxClipped(clipArea, itemLayout) { var clipped = true; for (var i = 0; i < itemLayout.ends.length; i++) { if (clipArea.contain(itemLayout.ends[i][0], itemLayout.ends[i][1])) { clipped = false; break; } } return clipped; } function setBoxCommon(el, data, dataIndex, isSimpleBox) { var itemModel = data.getItemModel(dataIndex); el.useStyle(data.getItemVisual(dataIndex, "style")); el.style.strokeNoScale = true; el.__simpleBox = isSimpleBox; setStatesStylesFromModel(el, itemModel); } function transInit(points, itemLayout) { return map(points, function(point) { point = point.slice(); point[1] = itemLayout.initBaseline; return point; }); } var LargeBoxPathShape = function() { function LargeBoxPathShape2() { } return LargeBoxPathShape2; }(); var LargeBoxPath = function(_super) { __extends(LargeBoxPath2, _super); function LargeBoxPath2(opts) { var _this = _super.call(this, opts) || this; _this.type = "largeCandlestickBox"; return _this; } LargeBoxPath2.prototype.getDefaultShape = function() { return new LargeBoxPathShape(); }; LargeBoxPath2.prototype.buildPath = function(ctx, shape) { var points = shape.points; for (var i = 0; i < points.length; ) { if (this.__sign === points[i++]) { var x = points[i++]; ctx.moveTo(x, points[i++]); ctx.lineTo(x, points[i++]); } else { i += 3; } } }; return LargeBoxPath2; }(Path); function createLarge(seriesModel, group, progressiveEls, incremental) { var data = seriesModel.getData(); var largePoints = data.getLayout("largePoints"); var elP = new LargeBoxPath({ shape: { points: largePoints }, __sign: 1, ignoreCoarsePointer: true }); group.add(elP); var elN = new LargeBoxPath({ shape: { points: largePoints }, __sign: -1, ignoreCoarsePointer: true }); group.add(elN); var elDoji = new LargeBoxPath({ shape: { points: largePoints }, __sign: 0, ignoreCoarsePointer: true }); group.add(elDoji); setLargeStyle(1, elP, seriesModel); setLargeStyle(-1, elN, seriesModel); setLargeStyle(0, elDoji, seriesModel); if (incremental) { elP.incremental = true; elN.incremental = true; } if (progressiveEls) { progressiveEls.push(elP, elN); } } function setLargeStyle(sign, el, seriesModel, data) { var borderColor = seriesModel.get(["itemStyle", sign > 0 ? "borderColor" : "borderColor0"]) || seriesModel.get(["itemStyle", sign > 0 ? "color" : "color0"]); if (sign === 0) { borderColor = seriesModel.get(["itemStyle", "borderColorDoji"]); } var itemStyle = seriesModel.getModel("itemStyle").getItemStyle(SKIP_PROPS); el.useStyle(itemStyle); el.style.fill = null; el.style.stroke = borderColor; } var CandlestickView$1 = CandlestickView; export { CandlestickView$1 as default };