diff --git a/img/tools/cursors/hand.png b/img/tools/cursors/hand.png new file mode 100644 index 00000000..7b47be2d Binary files /dev/null and b/img/tools/cursors/hand.png differ diff --git a/img/tools/icons/hand.png b/img/tools/icons/hand.png new file mode 100644 index 00000000..7b47be2d Binary files /dev/null and b/img/tools/icons/hand.png differ diff --git a/js/drawingtools/Move.js b/js/drawingtools/Move.js new file mode 100644 index 00000000..8a36e36f --- /dev/null +++ b/js/drawingtools/Move.js @@ -0,0 +1,58 @@ +/* + * @provide pskl.drawingtools.Move + * + * @require pskl.utils + */ +(function() { + var ns = $.namespace("pskl.drawingtools"); + + ns.Move = function() { + this.toolId = "tool-move" + + // Stroke's first point coordinates (set in applyToolAt) + this.startCol = null; + this.startRow = null; + + this.canvasOverlay = null; + }; + + pskl.utils.inherit(ns.Move, ns.BaseTool); + + /** + * @override + */ + ns.Move.prototype.applyToolAt = function(col, row, color, drawer) { + this.startCol = col; + this.startRow = row; + this.frameClone = drawer.frame.clone(); + }; + + ns.Move.prototype.moveToolAt = function(col, row, color, drawer) { + var colDiff = col - this.startCol, rowDiff = row - this.startRow; + if (colDiff != 0 || rowDiff != 0) { + this.shiftFrame(colDiff, rowDiff, drawer.frame, this.frameClone); + drawer.renderFrame(); + } + }; + + ns.Move.prototype.shiftFrame = function (colDiff, rowDiff, frame, reference) { + 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); + } else { + color = Constants.TRANSPARENT_COLOR; + } + frame.setPixel(col, row, color) + } + } + }; + + /** + * @override + */ + ns.Move.prototype.releaseToolAt = function(col, row, color, drawer) { + this.moveToolAt(col, row, color, drawer); + }; +})();