diff --git a/CMakeLists.txt b/CMakeLists.txt index 2be98d8..5694376 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,7 +134,7 @@ if(EMSCRIPTEN) FetchContent_Declare( SDL3 GIT_REPOSITORY https://github.com/libsdl-org/SDL.git - GIT_TAG release-3.2.12 + GIT_TAG release-3.4.4 GIT_SHALLOW TRUE ) set(SDL_SHARED OFF CACHE BOOL "" FORCE) diff --git a/Makefile b/Makefile index e589e99..b1174e8 100644 --- a/Makefile +++ b/Makefile @@ -291,6 +291,7 @@ linux_release: wasm: @echo "Compilando para WebAssembly - Version: $(VERSION)" docker run --rm \ + --user $(shell id -u):$(shell id -g) \ -v $(DIR_ROOT):/src \ -w /src \ emscripten/emsdk:latest \ diff --git a/source/core/rendering/screen.cpp b/source/core/rendering/screen.cpp index d33c392..15063aa 100644 --- a/source/core/rendering/screen.cpp +++ b/source/core/rendering/screen.cpp @@ -48,8 +48,10 @@ Screen* Screen::screen = nullptr; // i el joc es veu minúscul fins que l'usuari força un refresh manual // (p. ex., canviant el mode d'escalat amb F7). // -// Solució: registrem callbacks natius d'Emscripten (fullscreenchange, resize, +// Solució: registrem callbacks natius d'Emscripten (fullscreenchange, // orientationchange) que re-sincronitzen SDL amb l'estat real del navegador. +// NO registrem resize callback: en mòbil el scroll fa que el navegador oculti/ +// mostri la barra d'URL, disparant un resize del DOM per cada scroll. // Tots delegen en Screen::handleCanvasResized(), que crida setVideoMode() // amb l'estat de fullscreen actualitzat — això és el que realment restaura // la finestra SDL perquè dins setVideoMode es crida SDL_SetWindowFullscreen, @@ -80,11 +82,6 @@ namespace { return EM_FALSE; } - auto onEmResize(int /*event_type*/, const EmscriptenUiEvent* /*event*/, void* /*user_data*/) -> EM_BOOL { - emscripten_async_call(deferredCanvasResize, nullptr, 0); - return EM_FALSE; - } - auto onEmOrientationChange(int /*event_type*/, const EmscriptenOrientationChangeEvent* /*event*/, void* /*user_data*/) -> EM_BOOL { emscripten_async_call(deferredCanvasResize, nullptr, 0); return EM_FALSE; @@ -832,8 +829,10 @@ auto Screen::initSDLVideo() -> bool { // Vegeu el bloc de documentació a dalt del fitxer per al context complet. void Screen::registerEmscriptenEventCallbacks() { // NOLINT(readability-convert-member-functions-to-static) #ifdef __EMSCRIPTEN__ + // NO registrem resize callback. En mòbil, fer scroll fa que el navegador + // oculti/mostri la barra d'URL disparant un resize del DOM per cada scroll, + // i això portaria a cridar setVideoMode innecessàriament. Alineat amb CC i CCAE. emscripten_set_fullscreenchange_callback(EMSCRIPTEN_EVENT_TARGET_DOCUMENT, nullptr, EM_TRUE, onEmFullscreenChange); - emscripten_set_resize_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, nullptr, EM_TRUE, onEmResize); emscripten_set_orientationchange_callback(nullptr, EM_TRUE, onEmOrientationChange); #endif }