From 2aa8bf578b7c2eabe169c01c5f50632643a145f1 Mon Sep 17 00:00:00 2001 From: jdescottes Date: Sat, 17 May 2014 11:01:09 +0200 Subject: [PATCH] Enhancement : Move tool: shift out of bound pixels When holding shift and using the move tool,pixels normally exiting the frame will now be redrawn on the other end of the frame. Makes it easy to perform sliding animations. --- src/js/drawingtools/Move.js | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/js/drawingtools/Move.js b/src/js/drawingtools/Move.js index 630a5729..a40735fa 100644 --- a/src/js/drawingtools/Move.js +++ b/src/js/drawingtools/Move.js @@ -30,15 +30,23 @@ ns.Move.prototype.moveToolAt = function(col, row, color, frame, overlay, event) { var colDiff = col - this.startCol, rowDiff = row - this.startRow; - this.shiftFrame(colDiff, rowDiff, frame, this.frameClone); + this.shiftFrame(colDiff, rowDiff, frame, this.frameClone, event); }; - ns.Move.prototype.shiftFrame = function (colDiff, rowDiff, frame, reference) { + ns.Move.prototype.shiftFrame = function (colDiff, rowDiff, frame, reference, event) { var color; - for (var col = 0 ; col < frame.getWidth() ; col++) { - for (var row = 0 ; row < frame.getHeight() ; row++) { - if (reference.containsPixel(col - colDiff, row - rowDiff)) { - color = reference.getPixel(col - colDiff, row - rowDiff); + var w = frame.getWidth(); + var h = frame.getHeight(); + for (var col = 0 ; col < w ; col++) { + for (var row = 0 ; row < h ; row++) { + var x = col - colDiff; + var y = row - rowDiff; + if (event.shiftKey) { + x = (x + w) % w; + y = (y + h) % h; + } + if (reference.containsPixel(x, y)) { + color = reference.getPixel(x, y); } else { color = Constants.TRANSPARENT_COLOR; } @@ -51,15 +59,19 @@ * @override */ ns.Move.prototype.releaseToolAt = function(col, row, color, frame, overlay, event) { - this.moveToolAt(col, row, color, frame, overlay); + this.moveToolAt(col, row, color, frame, overlay, event); this.raiseSaveStateEvent({ colDiff : col - this.startCol, - rowDiff : row - this.startRow + rowDiff : row - this.startRow, + shiftKey : event.shiftKey }); }; ns.Move.prototype.replay = function(frame, replayData) { - this.shiftFrame(replayData.colDiff, replayData.rowDiff, frame, frame.clone()); + var event = { + shiftKey : replayData.shiftKey + }; + this.shiftFrame(replayData.colDiff, replayData.rowDiff, frame, frame.clone(), event); }; })();