(function () { var ns = $.namespace("pskl.selection"); ns.SelectionManager = function (overlayFrame) { this.overlayFrame = overlayFrame; this.currentSelection = null; this.currentFrame = null; $.subscribe(Events.CURRENT_FRAME_SET, $.proxy(this.onCurrentFrameChanged_, this)); $.subscribe(Events.SELECTION_CREATED, $.proxy(this.onSelectionCreated_, this)); $.subscribe(Events.SELECTION_DISMISSED, $.proxy(this.onSelectionDismissed_, this)); $.subscribe(Events.SELECTION_MOVE_REQUEST, $.proxy(this.onSelectionMoved_, this)); $.subscribe(Events.PASTE, $.proxy(this.onPaste_, this)); $.subscribe(Events.COPY, $.proxy(this.onCopy_, this)); $.subscribe(Events.CUT, $.proxy(this.onCut_, this)); $.subscribe(Events.TOOL_SELECTED, $.proxy(this.onToolSelected_, this)); }; /** * @private */ ns.SelectionManager.prototype.cleanSelection_ = function(selection) { if(this.currentSelection) { this.currentSelection.reset(); } this.overlayFrame.clear(); }; /** * @private */ ns.SelectionManager.prototype.onCurrentFrameChanged_ = function(evt, currentFrame) { if(currentFrame) { this.currentFrame = currentFrame; } else { throw "Bad current frame set in SelectionManager"; } }; /** * @private */ ns.SelectionManager.prototype.onToolSelected_ = function(evt, tool) { if(!(tool instanceof pskl.drawingtools.Select)) { this.cleanSelection_(); } }; /** * @private */ ns.SelectionManager.prototype.onSelectionDismissed_ = function(evt) { this.cleanSelection_(); }; /** * @private */ ns.SelectionManager.prototype.onCut_ = function(evt) { if(this.currentSelection && this.currentFrame) { // Put cut target into the selection: this.currentSelection.fillSelectionFromFrame(this.currentFrame); var pixels = this.currentSelection.pixels; for(var i=0, l=pixels.length; i