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() }) cursor_input.addEventListener('keydown', function(e){ if (focused) { focused.key(undefined, e.keyCode) } }) cursor_input.addEventListener('input', function(e){ if (current_tool.name == "shader") { cursor_input.value = "" return } if (! e.metaKey && ! e.ctrlKey && ! e.altKey) { e.preventDefault() } var char = cursor_input.value cursor_input.value = "" // var charFromKeyCode = String.fromCharCode(e.keyCode) switch (e.keyCode) { case 27: // esc if (focused) focused.blur() break case 219: // [ if (! focused && current_tool.name != "text") { brush.contract(1) break } case 221: // ] if (! focused && current_tool.name != "text") { brush.expand(1) break } default: if (focused) focused.key(char, e.keyCode) break } }) 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()