diff --git a/src/platforms/rcore_web.c b/src/platforms/rcore_web.c index f83e3159e..9068d463d 100644 --- a/src/platforms/rcore_web.c +++ b/src/platforms/rcore_web.c @@ -1131,7 +1131,15 @@ int InitPlatform(void) if ((CORE.Window.flags & FLAG_WINDOW_UNDECORATED) > 0) glfwWindowHint(GLFW_DECORATED, GLFW_FALSE); // Border and buttons on Window else glfwWindowHint(GLFW_DECORATED, GLFW_TRUE); // Decorated window - if ((CORE.Window.flags & FLAG_WINDOW_RESIZABLE) > 0) glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); // Resizable window + if ((CORE.Window.flags & FLAG_WINDOW_RESIZABLE) > 0) + { + glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); // Resizable window + + // bypass hidpi code block in libglfw.js + // https://github.com/raysan5/raylib/pull/4945#issuecomment-2906956170 + //------------------------------------------------------------------------ + glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_TRUE); + } else glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); // Avoid window being resizable // Disable FLAG_WINDOW_MINIMIZED, not supported on initialization @@ -1662,6 +1670,9 @@ static EM_BOOL EmscriptenFullscreenChangeCallback(int eventType, const Emscripte } } + // trigger resize event after a brief pause to ensure the canvas exists to resize + EM_ASM({ setTimeout(function() { window.dispatchEvent(new Event("resize")); }, 50); }); + return 1; // The event was consumed by the callback handler } @@ -1683,7 +1694,7 @@ static EM_BOOL EmscriptenResizeCallback(int eventType, const EmscriptenUiEvent * // so the size of the canvas object is explicitly retrieved below int width = EM_ASM_INT( return window.innerWidth; ); int height = EM_ASM_INT( return window.innerHeight; ); - + if (width < (int)CORE.Window.screenMin.width) width = CORE.Window.screenMin.width; else if ((width > (int)CORE.Window.screenMax.width) && (CORE.Window.screenMax.width > 0)) width = CORE.Window.screenMax.width; @@ -1692,6 +1703,8 @@ static EM_BOOL EmscriptenResizeCallback(int eventType, const EmscriptenUiEvent * emscripten_set_canvas_element_size(GetCanvasId(), width, height); + glfwSetWindowSize(platform.handle, width, height); // inform glfw of the new size + SetupViewport(width, height); // Reset viewport and projection matrix for new size CORE.Window.currentFbo.width = width;