tools.Spray = function(e, cx, cxMain) { var radius = cx.lineWidth / 2; var area = radius * radius * Math.PI; var dotsPerTick = Math.ceil(area / 30); var currentPos = utils.relativePos(e, cx.canvas); var spray = setInterval(function() { for (var i = 0 ; i < dotsPerTick ; i += 1) { var offset = utils.randomPointInRadius(radius); cx.fillRect(currentPos.x + offset.x, currentPos.y + offset.y, 1, 1); } }, 10); utils.trackDrag( null, function(e) { currentPos = utils.relativePos(e, cx.canvas); }, function() { clearInterval(spray); updateCanvas(cx, cxMain); } ); }
tools.Marker = function(e, cx, cxMain, onEnd) { cx.lineCap = 'round'; var pos = utils.relativePos(e, cx.canvas); function draw(e) { cx.beginPath(); cx.moveTo(pos.x, pos.y); pos = utils.relativePos(e, cx.canvas); cx.lineTo(pos.x, pos.y); cx.stroke(); cx.closePath(); } utils.trackDrag( draw, draw, function(e){ if (onEnd) { onEnd(e); } updateCanvas(cx, cxMain); } ); }
function draw(e) { cx.beginPath(); cx.moveTo(pos.x, pos.y); pos = utils.relativePos(e, cx.canvas); cx.lineTo(pos.x, pos.y); cx.stroke(); cx.closePath(); }
function(e) { cx.clearRect(0, 0, cx.canvas.width, cx.canvas.height); var rect = utils.rectangleFrom(relativeStart, utils.relativePos(e, cx.canvas)); cx.beginPath(); cx.fillRect(rect.left, rect.top, rect.width, rect.height); cx.closePath(); },
function(e) { cx.clearRect(0, 0, cx.canvas.width, cx.canvas.height); cx.beginPath(); cx.moveTo(startPos.x, startPos.y); pos = utils.relativePos(e, cx.canvas); cx.lineTo(pos.x, pos.y); cx.stroke(); cx.closePath(); },
function(e) { cx.clearRect(0, 0, cx.canvas.width, cx.canvas.height); var circle = utils.getCircle(relativeStart, utils.relativePos(e, cx.canvas)); cx.beginPath(); cx.arc(circle.centerX, circle.centerY, circle.radius, 0, Math.PI*2, false); cx.fill(); cx.closePath(); },
tools.Rectangle = function(e, cx, cxMain) { var relativeStart = utils.relativePos(e, cx.canvas); utils.trackDrag( null, function(e) { cx.clearRect(0, 0, cx.canvas.width, cx.canvas.height); var rect = utils.rectangleFrom(relativeStart, utils.relativePos(e, cx.canvas)); cx.beginPath(); cx.fillRect(rect.left, rect.top, rect.width, rect.height); cx.closePath(); }, (e) => { updateCanvas(cx, cxMain); } ); }
tools.Circle = function(e, cx, cxMain) { var relativeStart = utils.relativePos(e, cx.canvas); utils.trackDrag( null, function(e) { cx.clearRect(0, 0, cx.canvas.width, cx.canvas.height); var circle = utils.getCircle(relativeStart, utils.relativePos(e, cx.canvas)); cx.beginPath(); cx.arc(circle.centerX, circle.centerY, circle.radius, 0, Math.PI*2, false); cx.fill(); cx.closePath(); }, (e) => { updateCanvas(cx, cxMain); } ); }
function(e){ startPos = utils.relativePos(e, cx.canvas); },
function(e) { currentPos = utils.relativePos(e, cx.canvas); },