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