var dragging = false var drawing = true var erasing = false var focused var canvas, tools, palette, controls, brush, mode, current_tool function init () { build() bind() } function build () { shader.init() shader.run(canvas) shader.animate() canvas.append(canvas_rapper) brush.append(brush_rapper) palette.append(palette_rapper) controls.circle.focus() // controls.shader.focus() brush.bg = colors.red brush.generate() brush.build() } function bind () { canvas.bind() palette.bind() brush.bind() controls.bind() window.addEventListener('mouseup', function(){ dragging = erasing = false if (current_tool.name != 'shader') { cursor_input.focus() } }); window.addEventListener('mousedown', function(e){ if (current_tool.name == "shader") { return } cursor_input.focus() }) var direction = [0,1] cursor_input.addEventListener('keydown', function(e){ console.log("keycode:", e.keyCode) switch (e.keyCode) { case 27: // esc if (focused) focused.blur() break case 219: // [ if (current_tool.name != "text") { e.preventDefault() brush.contract(1) break } case 221: // ] if (current_tool.name != "text") { e.preventDefault() brush.expand(1) break } case 8: e.preventDefault() canvas.focusLex(focused.y-1, focused.x) focused.char = " " focused.build() return case 13: // return e.preventDefault() canvas.focusLex(focused.y, focused.x+1) return case 38: // up e.preventDefault() direction[0] = -1 direction[1] = 0 canvas.focusLex(focused.y + direction[0], focused.x + direction[1]) break case 40: // down e.preventDefault() direction[0] = 1 direction[1] = 0 canvas.focusLex(focused.y + direction[0], focused.x + direction[1]) break case 37: // left e.preventDefault() direction[0] = 0 direction[1] = -1 canvas.focusLex(focused.y + direction[0], focused.x + direction[1]) break case 39: // right e.preventDefault() direction[0] = 0 direction[1] = 1 canvas.focusLex(focused.y + direction[0], focused.x + direction[1]) break // default: // if (focused) { focused.key(undefined, e.keyCode) } } }) cursor_input.addEventListener('input', function(e){ /* if (! e.metaKey && ! e.ctrlKey && ! e.altKey) { e.preventDefault() } */ if (current_tool.name == "shader") { cursor_input.value = "" return } var char = cursor_input.value cursor_input.value = "" console.log("input:", char) if (focused && char) { var y = focused.y, x = focused.x focused.key(char, e.keyCode) canvas.focusLex(y + direction[0], focused.x + direction[1]) } }) var contentType = 'text/plain;charset=utf-8' document.body.addEventListener('copy', function (e) { if (e.clipboardData) { e.preventDefault(); e.clipboardData.setData(contentType, canvas.ascii()); } if (window.clipboardData) { e.returnValue = false; window.clipboardData.setData(contentType, canvas.ascii()); } }, false); document.addEventListener('DOMContentLoaded', function(){ if (current_tool.name != 'shader') { cursor_input.focus() } document.body.classList.remove('loading') }) } function int_key (f) { return function (key, keyCode) { var n = parseInt(key) ! isNaN(n) && f(n) } } init()