mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 15:18:49 +00:00
Merge pull request #4415 from p2jason/master
Remove the event queue from odin.js and directly invoke callbacks so they are executed in context where prevent default is possible
This commit is contained in:
+17
-14
@@ -1259,7 +1259,7 @@ class WebGLInterface {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory, eventQueue, event_temp) {
|
function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory) {
|
||||||
const MAX_INFO_CONSOLE_LINES = 512;
|
const MAX_INFO_CONSOLE_LINES = 512;
|
||||||
let infoConsoleLines = new Array();
|
let infoConsoleLines = new Array();
|
||||||
let currentLine = {};
|
let currentLine = {};
|
||||||
@@ -1267,6 +1267,19 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory, ev
|
|||||||
currentLine[true] = "";
|
currentLine[true] = "";
|
||||||
let prevIsError = false;
|
let prevIsError = false;
|
||||||
|
|
||||||
|
let event_temp = {};
|
||||||
|
|
||||||
|
const onEventReceived = (event_data, data, callback) => {
|
||||||
|
event_temp.data = event_data;
|
||||||
|
|
||||||
|
const exports = wasmMemoryInterface.exports;
|
||||||
|
const odin_ctx = exports.default_context_ptr();
|
||||||
|
|
||||||
|
exports.odin_dom_do_event_callback(data, callback, odin_ctx);
|
||||||
|
|
||||||
|
event_temp.data = null;
|
||||||
|
};
|
||||||
|
|
||||||
const writeToConsole = (line, isError) => {
|
const writeToConsole = (line, isError) => {
|
||||||
if (!line) {
|
if (!line) {
|
||||||
return;
|
return;
|
||||||
@@ -1594,7 +1607,7 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory, ev
|
|||||||
event_data.event = e;
|
event_data.event = e;
|
||||||
event_data.name_code = name_code;
|
event_data.name_code = name_code;
|
||||||
|
|
||||||
eventQueue.push({event_data: event_data, data: data, callback: callback});
|
onEventReceived(event_data, data, callback);
|
||||||
};
|
};
|
||||||
wasmMemoryInterface.listenerMap[{data: data, callback: callback}] = listener;
|
wasmMemoryInterface.listenerMap[{data: data, callback: callback}] = listener;
|
||||||
element.addEventListener(name, listener, !!use_capture);
|
element.addEventListener(name, listener, !!use_capture);
|
||||||
@@ -1611,7 +1624,7 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory, ev
|
|||||||
event_data.event = e;
|
event_data.event = e;
|
||||||
event_data.name_code = name_code;
|
event_data.name_code = name_code;
|
||||||
|
|
||||||
eventQueue.push({event_data: event_data, data: data, callback: callback});
|
onEventReceived(event_data, data, callback);
|
||||||
};
|
};
|
||||||
wasmMemoryInterface.listenerMap[{data: data, callback: callback}] = listener;
|
wasmMemoryInterface.listenerMap[{data: data, callback: callback}] = listener;
|
||||||
element.addEventListener(name, listener, !!use_capture);
|
element.addEventListener(name, listener, !!use_capture);
|
||||||
@@ -1915,10 +1928,7 @@ async function runWasm(wasmPath, consoleElement, extraForeignImports, wasmMemory
|
|||||||
}
|
}
|
||||||
wasmMemoryInterface.setIntSize(intSize);
|
wasmMemoryInterface.setIntSize(intSize);
|
||||||
|
|
||||||
let eventQueue = new Array();
|
let imports = odinSetupDefaultImports(wasmMemoryInterface, consoleElement, wasmMemoryInterface.memory);
|
||||||
let event_temp = {};
|
|
||||||
|
|
||||||
let imports = odinSetupDefaultImports(wasmMemoryInterface, consoleElement, wasmMemoryInterface.memory, eventQueue, event_temp);
|
|
||||||
let exports = {};
|
let exports = {};
|
||||||
|
|
||||||
if (extraForeignImports !== undefined) {
|
if (extraForeignImports !== undefined) {
|
||||||
@@ -1958,13 +1968,6 @@ async function runWasm(wasmPath, consoleElement, extraForeignImports, wasmMemory
|
|||||||
const dt = (currTimeStamp - prevTimeStamp)*0.001;
|
const dt = (currTimeStamp - prevTimeStamp)*0.001;
|
||||||
prevTimeStamp = currTimeStamp;
|
prevTimeStamp = currTimeStamp;
|
||||||
|
|
||||||
while (eventQueue.length > 0) {
|
|
||||||
let e = eventQueue.shift()
|
|
||||||
event_temp.data = e.event_data;
|
|
||||||
exports.odin_dom_do_event_callback(e.data, e.callback, odin_ctx);
|
|
||||||
}
|
|
||||||
event_temp.data = null;
|
|
||||||
|
|
||||||
if (!exports.step(dt, odin_ctx)) {
|
if (!exports.step(dt, odin_ctx)) {
|
||||||
exports._end();
|
exports._end();
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user