cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
118 lines (117 loc) • 4.14 kB
JavaScript
import { traverseElements } from "../../util/graphic.mjs";
import Line from "./Line.mjs";
import { getLabelStatesModels } from "../../label/labelStyle.mjs";
import Group from "../../../../zrender/lib/graphic/Group.mjs";
var LineDraw = function() {
function LineDraw2(LineCtor) {
this.group = new Group();
this._LineCtor = LineCtor || Line;
}
LineDraw2.prototype.updateData = function(lineData) {
var _this = this;
this._progressiveEls = null;
var lineDraw = this;
var group = lineDraw.group;
var oldLineData = lineDraw._lineData;
lineDraw._lineData = lineData;
if (!oldLineData) {
group.removeAll();
}
var seriesScope = makeSeriesScope(lineData);
lineData.diff(oldLineData).add(function(idx) {
_this._doAdd(lineData, idx, seriesScope);
}).update(function(newIdx, oldIdx) {
_this._doUpdate(oldLineData, lineData, oldIdx, newIdx, seriesScope);
}).remove(function(idx) {
group.remove(oldLineData.getItemGraphicEl(idx));
}).execute();
};
LineDraw2.prototype.updateLayout = function() {
var lineData = this._lineData;
if (!lineData) {
return;
}
lineData.eachItemGraphicEl(function(el, idx) {
el.updateLayout(lineData, idx);
}, this);
};
LineDraw2.prototype.incrementalPrepareUpdate = function(lineData) {
this._seriesScope = makeSeriesScope(lineData);
this._lineData = null;
this.group.removeAll();
};
LineDraw2.prototype.incrementalUpdate = function(taskParams, lineData) {
this._progressiveEls = [];
function updateIncrementalAndHover(el2) {
if (!el2.isGroup && !isEffectObject(el2)) {
el2.incremental = true;
el2.ensureState("emphasis").hoverLayer = true;
}
}
for (var idx = taskParams.start; idx < taskParams.end; idx++) {
var itemLayout = lineData.getItemLayout(idx);
if (lineNeedsDraw(itemLayout)) {
var el = new this._LineCtor(lineData, idx, this._seriesScope);
el.traverse(updateIncrementalAndHover);
this.group.add(el);
lineData.setItemGraphicEl(idx, el);
this._progressiveEls.push(el);
}
}
};
LineDraw2.prototype.remove = function() {
this.group.removeAll();
};
LineDraw2.prototype.eachRendered = function(cb) {
traverseElements(this._progressiveEls || this.group, cb);
};
LineDraw2.prototype._doAdd = function(lineData, idx, seriesScope) {
var itemLayout = lineData.getItemLayout(idx);
if (!lineNeedsDraw(itemLayout)) {
return;
}
var el = new this._LineCtor(lineData, idx, seriesScope);
lineData.setItemGraphicEl(idx, el);
this.group.add(el);
};
LineDraw2.prototype._doUpdate = function(oldLineData, newLineData, oldIdx, newIdx, seriesScope) {
var itemEl = oldLineData.getItemGraphicEl(oldIdx);
if (!lineNeedsDraw(newLineData.getItemLayout(newIdx))) {
this.group.remove(itemEl);
return;
}
if (!itemEl) {
itemEl = new this._LineCtor(newLineData, newIdx, seriesScope);
} else {
itemEl.updateData(newLineData, newIdx, seriesScope);
}
newLineData.setItemGraphicEl(newIdx, itemEl);
this.group.add(itemEl);
};
return LineDraw2;
}();
function isEffectObject(el) {
return el.animators && el.animators.length > 0;
}
function makeSeriesScope(lineData) {
var hostModel = lineData.hostModel;
var emphasisModel = hostModel.getModel("emphasis");
return {
lineStyle: hostModel.getModel("lineStyle").getLineStyle(),
emphasisLineStyle: emphasisModel.getModel(["lineStyle"]).getLineStyle(),
blurLineStyle: hostModel.getModel(["blur", "lineStyle"]).getLineStyle(),
selectLineStyle: hostModel.getModel(["select", "lineStyle"]).getLineStyle(),
emphasisDisabled: emphasisModel.get("disabled"),
blurScope: emphasisModel.get("blurScope"),
focus: emphasisModel.get("focus"),
labelStatesModels: getLabelStatesModels(hostModel)
};
}
function isPointNaN(pt) {
return isNaN(pt[0]) || isNaN(pt[1]);
}
function lineNeedsDraw(pts) {
return pts && !isPointNaN(pts[0]) && !isPointNaN(pts[1]);
}
var LineDraw$1 = LineDraw;
export { LineDraw$1 as default };