// 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); 
 | 
    } 
 | 
} 
 |