starting to work on textboxes
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Sat, 12 Jun 2021 19:59:18 +0000 (14:59 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Sat, 12 Jun 2021 19:59:18 +0000 (14:59 -0500)
site/js/js_events.js
src/tower.onyx

index ddc9a95f1f536a657646426e79fe506478b576c8..4ff47d315c9fc0f38cb45a305b9a21848ea5a797 100644 (file)
@@ -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;
         });
 
index aca6adcd174b139cf14604c5b27cd3cdfd226461..cc328d8cb963c7a4749f88a8c6c24eae337d497b 100644 (file)
@@ -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");
     }
 
     {