From 32814dbc93779030f99d2bc059fa865979d4c151 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sat, 12 Jun 2021 14:59:18 -0500 Subject: [PATCH] starting to work on textboxes --- site/js/js_events.js | 45 ++++++++++++++++++++++++++++++++++++++++++-- src/tower.onyx | 20 +++++++++++++++++++- 2 files changed, 62 insertions(+), 3 deletions(-) diff --git a/site/js/js_events.js b/site/js/js_events.js index ddc9a95..4ff47d3 100644 --- a/site/js/js_events.js +++ b/site/js/js_events.js @@ -30,14 +30,55 @@ window.ONYX_MODULES.push({ document.addEventListener("keydown", function (ev) { if (ev.isComposing || ev.keyCode === 229) return; ev.preventDefault(); - push_event_to_buffer(esp, event_size, 0x04, [ ev.keyCode ]); + + // NOTE: These modifiers need to match in js_events.onyx. + var modifiers = 0x0000; + if (ev.ctrlKey) modifiers |= 0x01; + if (ev.altKey) modifiers |= 0x02; + if (ev.metaKey) modifiers |= 0x04; + if (ev.shiftKey) modifiers |= 0x08; + + push_event_to_buffer(esp, event_size, 0x04, [ ev.keyCode, modifiers ]); + + var keyname = ev.code; + let WASM_U32 = new Uint32Array(ONYX_MEMORY.buffer); + let event_idx = esp + (WASM_U32[esp] - 1) * (event_size / 4) + 2; + + let WASM_U8 = new Uint8Array(ONYX_MEMORY.buffer); + + for (var i = 0; i < keyname.length; i++) { + WASM_U8[event_idx * 4 + (4 * 4) + i] = keyname.charCodeAt(i); + } + + WASM_U8[event_idx * 4 + (4 * 4) + 15] = keyname.length; return false; }); document.addEventListener("keyup", function (ev) { if (ev.isComposing || ev.keyCode === 229) return; ev.preventDefault(); - push_event_to_buffer(esp, event_size, 0x05, [ ev.keyCode ]); + + // NOTE: These modifiers need to match in js_events.onyx. + var modifiers = 0x0000; + if (ev.ctrlKey) modifiers |= 0x01; + if (ev.altKey) modifiers |= 0x02; + if (ev.metaKey) modifiers |= 0x04; + if (ev.shiftKey) modifiers |= 0x08; + + push_event_to_buffer(esp, event_size, 0x05, [ ev.keyCode, modifiers ]); + + var keyname = ev.code; + let WASM_U32 = new Uint32Array(ONYX_MEMORY.buffer); + let event_idx = esp + (WASM_U32[esp] - 1) * (event_size / 4) + 2; + + let WASM_U8 = new Uint8Array(ONYX_MEMORY.buffer); + + for (var i = 0; i < keyname.length; i++) { + WASM_U8[event_idx * 4 + (4 * 4) + i] = keyname.charCodeAt(i); + } + + WASM_U8[event_idx * 4 + (4 * 4) + 15] = keyname.length; + return false; }); diff --git a/src/tower.onyx b/src/tower.onyx index aca6adc..cc328d8 100644 --- a/src/tower.onyx +++ b/src/tower.onyx @@ -54,6 +54,15 @@ poll_events :: () { case .MouseMove do ui.update_mouse_position(~~ event.mouse.pos_x, ~~ event.mouse.pos_y); case .KeyDown { + #if false { + printf("'%s' was down with", event.keyboard->get_name()); + if event.keyboard.modifiers & .CTRL do print(" CTRL"); + if event.keyboard.modifiers & .ALT do print(" ALT"); + if event.keyboard.modifiers & .META do print(" META"); + if event.keyboard.modifiers & .SHIFT do print(" SHIFT"); + print(".\n"); + } + if event.keyboard.keycode == 116 { refresh :: () -> void #foreign "game" "refresh" --- refresh(); @@ -172,15 +181,24 @@ draw :: () { } + // When enum metadata is embedded in the binary file, this can become a for loop. radio: ui.Rectangle; radio, slider_panel = split_horizontal(slider_panel, top_height=32); ui.radio(padding(radio, left=12), ^radio_value, .Apples, "Apples"); radio, slider_panel = split_horizontal(slider_panel, top_height=32); ui.radio(padding(radio, left=12), ^radio_value, .Bananas, "Bananas"); - + radio, slider_panel = split_horizontal(slider_panel, top_height=32); ui.radio(padding(radio, left=12), ^radio_value, .Coconut, "Coconut"); + + radio, slider_panel = split_horizontal(slider_panel, top_height=32); + ui.radio(padding(radio, left=12), ^radio_value, .Apples, "Another Apples"); + + + textbox: ui.Rectangle; + textbox, slider_panel = split_horizontal(slider_panel, top_height=48, padding=8); + ui.textbox(padding(textbox, left=12, right=12), "Test Text"); } { -- 2.25.1