function freehandTool(toolbar) { "use strict"; var currentColor, lastPoint; function colorChange(evt) { currentColor = evt.detail; } function freehand(block, currentColorBias) { toolbar.editor.setBlock(block, currentColor); toolbar.editor.resolveConflict(block, currentColorBias, currentColor); } function blockLine(from, to, currentColorBias) { toolbar.editor.blockLine(from, to, function (block) { freehand(block, currentColorBias); }); } function canvasDown(evt) { toolbar.editor.takeUndoSnapshot(); if (evt.detail.shiftKey && lastPoint) { blockLine(lastPoint, evt.detail, !evt.detail.altKey); } else { freehand(evt.detail, !evt.detail.altKey); } lastPoint = evt.detail; } function canvasDrag(evt) { if (lastPoint) { blockLine(lastPoint, evt.detail, !evt.detail.altKey); lastPoint = evt.detail; } } function init() { toolbar.editor.canvas.addEventListener("canvasDown", canvasDown, false); toolbar.editor.canvas.addEventListener("canvasDrag", canvasDrag, false); toolbar.palette.canvas.addEventListener("colorChange", colorChange, false); currentColor = toolbar.palette.getCurrentColor(); return true; } function remove() { toolbar.editor.canvas.removeEventListener("canvasDown", canvasDown); toolbar.editor.canvas.removeEventListener("canvasDrag", canvasDrag); toolbar.palette.canvas.removeEventListener("colorChange", colorChange); } function toString() { return "Freehand"; } return { "init": init, "remove": remove, "toString": toString, "uid": "freehand", "autoselect": true }; } AnsiEditController.addTool(freehandTool, 102);