113 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
		
			
		
	
	
			113 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
| 
								 | 
							
								import { __extends } from "tslib";
							 | 
						||
| 
								 | 
							
								import Displayble from './Displayable.js';
							 | 
						||
| 
								 | 
							
								import BoundingRect from '../core/BoundingRect.js';
							 | 
						||
| 
								 | 
							
								var m = [];
							 | 
						||
| 
								 | 
							
								var IncrementalDisplayable = (function (_super) {
							 | 
						||
| 
								 | 
							
								    __extends(IncrementalDisplayable, _super);
							 | 
						||
| 
								 | 
							
								    function IncrementalDisplayable() {
							 | 
						||
| 
								 | 
							
								        var _this = _super !== null && _super.apply(this, arguments) || this;
							 | 
						||
| 
								 | 
							
								        _this.notClear = true;
							 | 
						||
| 
								 | 
							
								        _this.incremental = true;
							 | 
						||
| 
								 | 
							
								        _this._displayables = [];
							 | 
						||
| 
								 | 
							
								        _this._temporaryDisplayables = [];
							 | 
						||
| 
								 | 
							
								        _this._cursor = 0;
							 | 
						||
| 
								 | 
							
								        return _this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    IncrementalDisplayable.prototype.traverse = function (cb, context) {
							 | 
						||
| 
								 | 
							
								        cb.call(context, this);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    IncrementalDisplayable.prototype.useStyle = function () {
							 | 
						||
| 
								 | 
							
								        this.style = {};
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    IncrementalDisplayable.prototype.getCursor = function () {
							 | 
						||
| 
								 | 
							
								        return this._cursor;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    IncrementalDisplayable.prototype.innerAfterBrush = function () {
							 | 
						||
| 
								 | 
							
								        this._cursor = this._displayables.length;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    IncrementalDisplayable.prototype.clearDisplaybles = function () {
							 | 
						||
| 
								 | 
							
								        this._displayables = [];
							 | 
						||
| 
								 | 
							
								        this._temporaryDisplayables = [];
							 | 
						||
| 
								 | 
							
								        this._cursor = 0;
							 | 
						||
| 
								 | 
							
								        this.markRedraw();
							 | 
						||
| 
								 | 
							
								        this.notClear = false;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    IncrementalDisplayable.prototype.clearTemporalDisplayables = function () {
							 | 
						||
| 
								 | 
							
								        this._temporaryDisplayables = [];
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    IncrementalDisplayable.prototype.addDisplayable = function (displayable, notPersistent) {
							 | 
						||
| 
								 | 
							
								        if (notPersistent) {
							 | 
						||
| 
								 | 
							
								            this._temporaryDisplayables.push(displayable);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            this._displayables.push(displayable);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        this.markRedraw();
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    IncrementalDisplayable.prototype.addDisplayables = function (displayables, notPersistent) {
							 | 
						||
| 
								 | 
							
								        notPersistent = notPersistent || false;
							 | 
						||
| 
								 | 
							
								        for (var i = 0; i < displayables.length; i++) {
							 | 
						||
| 
								 | 
							
								            this.addDisplayable(displayables[i], notPersistent);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    IncrementalDisplayable.prototype.getDisplayables = function () {
							 | 
						||
| 
								 | 
							
								        return this._displayables;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    IncrementalDisplayable.prototype.getTemporalDisplayables = function () {
							 | 
						||
| 
								 | 
							
								        return this._temporaryDisplayables;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    IncrementalDisplayable.prototype.eachPendingDisplayable = function (cb) {
							 | 
						||
| 
								 | 
							
								        for (var i = this._cursor; i < this._displayables.length; i++) {
							 | 
						||
| 
								 | 
							
								            cb && cb(this._displayables[i]);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        for (var i = 0; i < this._temporaryDisplayables.length; i++) {
							 | 
						||
| 
								 | 
							
								            cb && cb(this._temporaryDisplayables[i]);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    IncrementalDisplayable.prototype.update = function () {
							 | 
						||
| 
								 | 
							
								        this.updateTransform();
							 | 
						||
| 
								 | 
							
								        for (var i = this._cursor; i < this._displayables.length; i++) {
							 | 
						||
| 
								 | 
							
								            var displayable = this._displayables[i];
							 | 
						||
| 
								 | 
							
								            displayable.parent = this;
							 | 
						||
| 
								 | 
							
								            displayable.update();
							 | 
						||
| 
								 | 
							
								            displayable.parent = null;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        for (var i = 0; i < this._temporaryDisplayables.length; i++) {
							 | 
						||
| 
								 | 
							
								            var displayable = this._temporaryDisplayables[i];
							 | 
						||
| 
								 | 
							
								            displayable.parent = this;
							 | 
						||
| 
								 | 
							
								            displayable.update();
							 | 
						||
| 
								 | 
							
								            displayable.parent = null;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    IncrementalDisplayable.prototype.getBoundingRect = function () {
							 | 
						||
| 
								 | 
							
								        if (!this._rect) {
							 | 
						||
| 
								 | 
							
								            var rect = new BoundingRect(Infinity, Infinity, -Infinity, -Infinity);
							 | 
						||
| 
								 | 
							
								            for (var i = 0; i < this._displayables.length; i++) {
							 | 
						||
| 
								 | 
							
								                var displayable = this._displayables[i];
							 | 
						||
| 
								 | 
							
								                var childRect = displayable.getBoundingRect().clone();
							 | 
						||
| 
								 | 
							
								                if (displayable.needLocalTransform()) {
							 | 
						||
| 
								 | 
							
								                    childRect.applyTransform(displayable.getLocalTransform(m));
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                rect.union(childRect);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            this._rect = rect;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return this._rect;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    IncrementalDisplayable.prototype.contain = function (x, y) {
							 | 
						||
| 
								 | 
							
								        var localPos = this.transformCoordToLocal(x, y);
							 | 
						||
| 
								 | 
							
								        var rect = this.getBoundingRect();
							 | 
						||
| 
								 | 
							
								        if (rect.contain(localPos[0], localPos[1])) {
							 | 
						||
| 
								 | 
							
								            for (var i = 0; i < this._displayables.length; i++) {
							 | 
						||
| 
								 | 
							
								                var displayable = this._displayables[i];
							 | 
						||
| 
								 | 
							
								                if (displayable.contain(x, y)) {
							 | 
						||
| 
								 | 
							
								                    return true;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return IncrementalDisplayable;
							 | 
						||
| 
								 | 
							
								}(Displayble));
							 | 
						||
| 
								 | 
							
								export default IncrementalDisplayable;
							 |