diff options
Diffstat (limited to 'js/ui/keys.js')
| -rw-r--r-- | js/ui/keys.js | 72 |
1 files changed, 40 insertions, 32 deletions
diff --git a/js/ui/keys.js b/js/ui/keys.js index 2ce681e..6dc013f 100644 --- a/js/ui/keys.js +++ b/js/ui/keys.js @@ -1,7 +1,6 @@ var keys = (function(){ var keys = {} - var direction = [0,1] keys.bind = function(){ cursor_input.addEventListener('keydown', function(e){ @@ -42,9 +41,13 @@ var keys = (function(){ brush.modified = false } break - case 8: + case 8: // backspace e.preventDefault() - current_canvas.focusLex(focused.y, focused.x - 1) + if (current_canvas === canvas) + undo.new() + current_canvas.focus_add(-1, 0) + if (current_canvas === canvas) + undo.save_focused_lex() focused.char = " " focused.build() return @@ -54,19 +57,35 @@ var keys = (function(){ return case 38: // up e.preventDefault() - current_canvas.focusLex(focused.y - 1, focused.x + 0) + current_canvas.focus_add(0, -1) break case 40: // down e.preventDefault() - current_canvas.focusLex(focused.y + 1, focused.x + 0) + current_canvas.focus_add(0, 1) break case 37: // left e.preventDefault() - current_canvas.focusLex(focused.y + 0, focused.x - 1) + current_canvas.focus_add(-1, 0) break case 39: // right e.preventDefault() - current_canvas.focusLex(focused.y + 0, focused.x + 1) + current_canvas.focus_add(1, 0) + break + // use typical windows and os x shortcuts + // undo: ctrl-z or cmd-z + // redo: ctrl-y or shift-cmd-z + case 89: // y + if (!e.ctrlKey && !e.metaKey) break; + e.preventDefault(); + undo.redo(); + break + case 90: // z + if (!e.ctrlKey && !e.metaKey) break; + e.preventDefault(); + if (e.shiftKey) + undo.redo(); + else + undo.undo(); break // default: // if (focused) { focused.key(undefined, e.keyCode) } @@ -102,10 +121,13 @@ var keys = (function(){ if (focused && char) { var y = focused.y, x = focused.x + if (current_canvas === canvas){ + undo.new() + undo.save_focused_lex() + } var moving = focused.key(char, e.keyCode) if ( ! moving || ! ('y' in focused && 'x' in focused) ) { return } - // console.log(y, direction[0], x, direction[1]) - current_canvas.focusLex(y + direction[0], x + direction[1]) + current_canvas.focus_add(1, 0) } }) @@ -122,35 +144,26 @@ var keys = (function(){ ! isNaN(n) && f(n) } } - - keys.arrow_key = function (lex, canvas, prop, rebuild_prop, min, max) { + + keys.arrow_key = function (fn) { return function (e){ switch (e.keyCode) { case 38: // up e.preventDefault() - canvas[prop] = Math.min(canvas[prop]+1, max) - lex.char = "" + canvas[prop] - lex.build() - canvas[rebuild_prop]() + fn(1) break case 40: // down e.preventDefault() - canvas[prop] = Math.max(canvas[prop]-1, min) - lex.char = "" + canvas[prop] - lex.build() - canvas[rebuild_prop]() + fn(-1) break } } } - keys.single_numeral_key = function (lex, canvas, prop, min, max) { + keys.single_numeral_key = function (lex, fn) { return keys.int_key(function(n, keyCode){ if (n == 0) n = 10 lex.blur() - lex.char = ""+n - lex.build() - canvas[prop] = n - canvas.rebuild() + fn(n) }) } keys.multi_numeral_key = function (lex, digits){ @@ -163,18 +176,13 @@ var keys = (function(){ lex.build() }) } - keys.multi_numeral_blur = function (lex, canvas, prop, min, max){ + keys.multi_numeral_blur = function (lex, fn){ return function(){ var current = parseInt(lex.char) - var n = clamp(current, min, max) - if (! n || isNaN(current)) return - lex.char = n+"" - lex.build() - canvas[prop] = n - canvas.resize(canvas.w, canvas.h) + fn(current) } } - + return keys })() |
