zrender
Version:
A lightweight graphic library providing 2d draw for Apache ECharts
59 lines (49 loc) • 1.61 kB
text/typescript
// CompoundPath to improve performance
import Path from './Path';
import PathProxy from '../core/PathProxy';
export interface CompoundPathShape {
paths: Path[]
}
export default class CompoundPath extends Path {
type = 'compound'
shape: CompoundPathShape
private _updatePathDirty() {
const paths = this.shape.paths;
let dirtyPath = this.shapeChanged();
for (let i = 0; i < paths.length; i++) {
// Mark as dirty if any subpath is dirty
dirtyPath = dirtyPath || paths[i].shapeChanged();
}
if (dirtyPath) {
this.dirtyShape();
}
}
beforeBrush() {
this._updatePathDirty();
const paths = this.shape.paths || [];
const scale = this.getGlobalScale();
// Update path scale
for (let i = 0; i < paths.length; i++) {
if (!paths[i].path) {
paths[i].createPathProxy();
}
paths[i].path.setScale(scale[0], scale[1], paths[i].segmentIgnoreThreshold);
}
}
buildPath(ctx: PathProxy | CanvasRenderingContext2D, shape: CompoundPathShape) {
const paths = shape.paths || [];
for (let i = 0; i < paths.length; i++) {
paths[i].buildPath(ctx, paths[i].shape, true);
}
}
afterBrush() {
const paths = this.shape.paths || [];
for (let i = 0; i < paths.length; i++) {
paths[i].pathUpdated();
}
}
getBoundingRect() {
this._updatePathDirty.call(this);
return Path.prototype.getBoundingRect.call(this);
}
}