mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Fix issues with js events not being initialized properly
This commit is contained in:
Vendored
+13
@@ -1,6 +1,8 @@
|
|||||||
//+build js wasm32, js wasm64p32
|
//+build js wasm32, js wasm64p32
|
||||||
package wasm_js_interface
|
package wasm_js_interface
|
||||||
|
|
||||||
|
import "core:runtime"
|
||||||
|
|
||||||
foreign import dom_lib "odin_dom"
|
foreign import dom_lib "odin_dom"
|
||||||
|
|
||||||
Event_Kind :: enum u32 {
|
Event_Kind :: enum u32 {
|
||||||
@@ -343,7 +345,18 @@ do_event_callback :: proc(user_data: rawptr, callback: proc(e: Event)) {
|
|||||||
user_data = user_data,
|
user_data = user_data,
|
||||||
callback = callback,
|
callback = callback,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
init_event_raw(&event)
|
init_event_raw(&event)
|
||||||
|
|
||||||
|
if event.kind == .Key_Up || event.kind == .Key_Down || event.kind == .Key_Press {
|
||||||
|
key := transmute(^runtime.Raw_String) &event.key.key
|
||||||
|
key.data = &event.key._key_buf[0]
|
||||||
|
|
||||||
|
code := transmute(^runtime.Raw_String) &event.key.code
|
||||||
|
code.data = &event.key._code_buf[0]
|
||||||
|
}
|
||||||
|
|
||||||
callback(event)
|
callback(event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Vendored
+17
-2
@@ -99,6 +99,11 @@ class WasmMemoryInterface {
|
|||||||
storeF64(addr, value) { this.mem.setFloat64(addr, value, true); }
|
storeF64(addr, value) { this.mem.setFloat64(addr, value, true); }
|
||||||
storeInt(addr, value) { this.mem.setInt32 (addr, value, true); }
|
storeInt(addr, value) { this.mem.setInt32 (addr, value, true); }
|
||||||
storeUint(addr, value) { this.mem.setUint32 (addr, value, true); }
|
storeUint(addr, value) { this.mem.setUint32 (addr, value, true); }
|
||||||
|
|
||||||
|
storeString(addr, value) {
|
||||||
|
const bytes = this.loadBytes(addr, value.length);
|
||||||
|
new TextEncoder("utf-8").encodeInto(value, bytes);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class WebGLInterface {
|
class WebGLInterface {
|
||||||
@@ -1384,6 +1389,7 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement) {
|
|||||||
|
|
||||||
wmi.storeUint(off(W), event_temp_data.id_ptr);
|
wmi.storeUint(off(W), event_temp_data.id_ptr);
|
||||||
wmi.storeUint(off(W), event_temp_data.id_len);
|
wmi.storeUint(off(W), event_temp_data.id_len);
|
||||||
|
wmi.storeUint(off(W), 0); // padding
|
||||||
|
|
||||||
wmi.storeF64(off(8), e.timeStamp*1e-3);
|
wmi.storeF64(off(8), e.timeStamp*1e-3);
|
||||||
|
|
||||||
@@ -1417,8 +1423,14 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement) {
|
|||||||
wmi.storeI16(off(2), e.button);
|
wmi.storeI16(off(2), e.button);
|
||||||
wmi.storeU16(off(2), e.buttons);
|
wmi.storeU16(off(2), e.buttons);
|
||||||
} else if (e instanceof KeyboardEvent) {
|
} else if (e instanceof KeyboardEvent) {
|
||||||
let keyOffset = off(W*2, W);
|
// NOTE: we set string data pointers on the
|
||||||
let codeOffet = off(W*2, W);
|
// native side, so skip those for now and
|
||||||
|
// set only string length
|
||||||
|
const keyPtr = off(W);
|
||||||
|
wmi.storeI32(off(W), e.key.length);
|
||||||
|
const codePtr = off(W);
|
||||||
|
wmi.storeI32(off(W), e.code.length);
|
||||||
|
|
||||||
wmi.storeU8(off(1), e.location);
|
wmi.storeU8(off(1), e.location);
|
||||||
|
|
||||||
wmi.storeU8(off(1), !!e.ctrlKey);
|
wmi.storeU8(off(1), !!e.ctrlKey);
|
||||||
@@ -1427,6 +1439,9 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement) {
|
|||||||
wmi.storeU8(off(1), !!e.metaKey);
|
wmi.storeU8(off(1), !!e.metaKey);
|
||||||
|
|
||||||
wmi.storeU8(off(1), !!e.repeat);
|
wmi.storeU8(off(1), !!e.repeat);
|
||||||
|
|
||||||
|
wmi.storeString(off(16, 1), e.key);
|
||||||
|
wmi.storeString(off(16, 1), e.code);
|
||||||
} else if (e instanceof WheelEvent) {
|
} else if (e instanceof WheelEvent) {
|
||||||
wmi.storeF64(off(8), e.deltaX);
|
wmi.storeF64(off(8), e.deltaX);
|
||||||
wmi.storeF64(off(8), e.deltaY);
|
wmi.storeF64(off(8), e.deltaY);
|
||||||
|
|||||||
Reference in New Issue
Block a user