in src/chart/helper/Line.ts [223:333]
_updateCommonStl(lineData: SeriesData, idx: number, seriesScope?: LineDrawSeriesScope) {
const seriesModel = lineData.hostModel as SeriesModel;
const line = this.childOfName('line') as ECLinePath;
let emphasisLineStyle = seriesScope && seriesScope.emphasisLineStyle;
let blurLineStyle = seriesScope && seriesScope.blurLineStyle;
let selectLineStyle = seriesScope && seriesScope.selectLineStyle;
let labelStatesModels = seriesScope && seriesScope.labelStatesModels;
let emphasisDisabled = seriesScope && seriesScope.emphasisDisabled;
let focus = (seriesScope && seriesScope.focus) as DefaultEmphasisFocus;
let blurScope = (seriesScope && seriesScope.blurScope) as BlurScope;
// Optimization for large dataset
if (!seriesScope || lineData.hasItemOption) {
const itemModel = lineData.getItemModel<LineDrawModelOption>(idx);
const emphasisModel = itemModel.getModel('emphasis');
emphasisLineStyle = emphasisModel.getModel('lineStyle').getLineStyle();
blurLineStyle = itemModel.getModel(['blur', 'lineStyle']).getLineStyle();
selectLineStyle = itemModel.getModel(['select', 'lineStyle']).getLineStyle();
emphasisDisabled = emphasisModel.get('disabled');
focus = emphasisModel.get('focus');
blurScope = emphasisModel.get('blurScope');
labelStatesModels = getLabelStatesModels(itemModel);
}
const lineStyle = lineData.getItemVisual(idx, 'style');
const visualColor = lineStyle.stroke;
line.useStyle(lineStyle);
line.style.fill = null;
line.style.strokeNoScale = true;
line.ensureState('emphasis').style = emphasisLineStyle;
line.ensureState('blur').style = blurLineStyle;
line.ensureState('select').style = selectLineStyle;
// Update symbol
each(SYMBOL_CATEGORIES, function (symbolCategory) {
const symbol = this.childOfName(symbolCategory) as ECSymbol;
if (symbol) {
// Share opacity and color with line.
symbol.setColor(visualColor);
symbol.style.opacity = lineStyle.opacity;
for (let i = 0; i < SPECIAL_STATES.length; i++) {
const stateName = SPECIAL_STATES[i];
const lineState = line.getState(stateName);
if (lineState) {
const lineStateStyle = lineState.style || {};
const state = symbol.ensureState(stateName);
const stateStyle = state.style || (state.style = {});
if (lineStateStyle.stroke != null) {
stateStyle[symbol.__isEmptyBrush ? 'stroke' : 'fill'] = lineStateStyle.stroke;
}
if (lineStateStyle.opacity != null) {
stateStyle.opacity = lineStateStyle.opacity;
}
}
}
symbol.markRedraw();
}
}, this);
const rawVal = seriesModel.getRawValue(idx) as number;
setLabelStyle(this, labelStatesModels, {
labelDataIndex: idx,
labelFetcher: {
getFormattedLabel(dataIndex, stateName) {
return seriesModel.getFormattedLabel(dataIndex, stateName, lineData.dataType);
}
},
inheritColor: visualColor as ColorString || '#000',
defaultOpacity: lineStyle.opacity,
defaultText: (rawVal == null
? lineData.getName(idx)
: isFinite(rawVal)
? round(rawVal)
: rawVal) + ''
});
const label = this.getTextContent() as InnerLineLabel;
// Always set `textStyle` even if `normalStyle.text` is null, because default
// values have to be set on `normalStyle`.
if (label) {
const labelNormalModel = labelStatesModels.normal as unknown as Model<LineLabelOption>;
label.__align = label.style.align;
label.__verticalAlign = label.style.verticalAlign;
// 'start', 'middle', 'end'
label.__position = labelNormalModel.get('position') || 'middle';
let distance = labelNormalModel.get('distance');
if (!isArray(distance)) {
distance = [distance, distance];
}
label.__labelDistance = distance;
}
this.setTextConfig({
position: null,
local: true,
inside: false // Can't be inside for stroke element.
});
toggleHoverEmphasis(this, focus, blurScope, emphasisDisabled);
}