From 53c02f57b43d6965d008faae6f8a1a6357f2fb45 Mon Sep 17 00:00:00 2001 From: treeform Date: Wed, 26 Aug 2026 14:20:41 -0700 Subject: [PATCH] size emscripten canvas from iframe Co-authored-by: Cursor --- src/windy/platforms/emscripten/emdefs.nim | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/windy/platforms/emscripten/emdefs.nim b/src/windy/platforms/emscripten/emdefs.nim index 503333da..a84a68f6 100644 --- a/src/windy/platforms/emscripten/emdefs.nim +++ b/src/windy/platforms/emscripten/emdefs.nim @@ -18,10 +18,22 @@ proc emscripten_sleep*(ms: cuint) {.importc.} #include EM_JS(int, get_window_width, (), { + var canvas = (typeof Module !== 'undefined' && Module.canvas) + ? Module.canvas + : document.getElementById('canvas'); + if (canvas && canvas.clientWidth > 0) { + return canvas.clientWidth; + } return window.innerWidth; }); EM_JS(int, get_window_height, (), { + var canvas = (typeof Module !== 'undefined' && Module.canvas) + ? Module.canvas + : document.getElementById('canvas'); + if (canvas && canvas.clientHeight > 0) { + return canvas.clientHeight; + } return window.innerHeight; }); @@ -42,6 +54,15 @@ EM_JS(void, setup_windy_runtime, (), { Module.canvas.windyContextHandlerAdded = true; } + if (Module.canvas && !Module.canvas.windyResizeObserverAdded && + typeof ResizeObserver !== 'undefined') { + var observer = new ResizeObserver(function() { + window.dispatchEvent(new Event('resize')); + }); + observer.observe(Module.canvas); + Module.canvas.windyResizeObserverAdded = true; + } + if (!window.windyErrorHandlerAdded) { window.addEventListener("error", function() { console.info("Exception thrown, see JavaScript console");