| // CompoundPath to improve performance |
| import Path from './Path'; |
| export default Path.extend({ |
| type: 'compound', |
| shape: { |
| paths: null |
| }, |
| _updatePathDirty: function () { |
| var dirtyPath = this.__dirtyPath; |
| var paths = this.shape.paths; |
| |
| for (var i = 0; i < paths.length; i++) { |
| // Mark as dirty if any subpath is dirty |
| dirtyPath = dirtyPath || paths[i].__dirtyPath; |
| } |
| |
| this.__dirtyPath = dirtyPath; |
| this.__dirty = this.__dirty || dirtyPath; |
| }, |
| beforeBrush: function () { |
| this._updatePathDirty(); |
| |
| var paths = this.shape.paths || []; |
| var scale = this.getGlobalScale(); // Update path scale |
| |
| for (var 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: function (ctx, shape) { |
| var paths = shape.paths || []; |
| |
| for (var i = 0; i < paths.length; i++) { |
| paths[i].buildPath(ctx, paths[i].shape, true); |
| } |
| }, |
| afterBrush: function () { |
| var paths = this.shape.paths || []; |
| |
| for (var i = 0; i < paths.length; i++) { |
| paths[i].__dirtyPath = false; |
| } |
| }, |
| getBoundingRect: function () { |
| this._updatePathDirty(); |
| |
| return Path.prototype.getBoundingRect.call(this); |
| } |
| }); |