From 585c93054e69d832bb6a30efcfe6caa889ab96e0 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Mon, 13 Apr 2026 18:31:16 +0200 Subject: [PATCH] commit per a provar les coses rares de la pantalla en wasm --- source/core/rendering/screen.cpp | 9 +++++++++ source/core/rendering/screen.hpp | 1 + source/core/system/director.cpp | 2 +- source/core/system/global_events.cpp | 18 +++++++++++++----- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/source/core/rendering/screen.cpp b/source/core/rendering/screen.cpp index d06deb5..5189fbb 100644 --- a/source/core/rendering/screen.cpp +++ b/source/core/rendering/screen.cpp @@ -168,6 +168,15 @@ void Screen::toggleVideoMode() { setVideoMode(Options::video.fullscreen); } +// Re-sincronitza el logical size i el factor de zoom quan la mida de la finestra canvia +// per una causa externa al joc: navegador sortint de fullscreen (Esc), rotació del dispositiu, +// redimensionat de la finestra, etc. No toca SDL_SetWindowFullscreen ni SDL_SetWindowSize +// per no interferir amb el que estigui fent el sistema/navegador. +void Screen::handleWindowResized() { + adjustRenderLogicalSize(); + updateZoomFactor(); +} + // Reduce el tamaño de la ventana auto Screen::decWindowZoom() -> bool { if (static_cast(Options::video.fullscreen) == 0) { diff --git a/source/core/rendering/screen.hpp b/source/core/rendering/screen.hpp index 7da13c0..a04b9fd 100644 --- a/source/core/rendering/screen.hpp +++ b/source/core/rendering/screen.hpp @@ -38,6 +38,7 @@ class Screen { // Video y ventana void setVideoMode(bool mode); // Establece el modo de video void toggleVideoMode(); // Cambia entre pantalla completa y ventana + void handleWindowResized(); // Re-sincronitza logical size i zoom en canvis de mida externs (fullscreen, rotació, resize) void toggleIntegerScale(); // Alterna entre activar y desactivar el escalado entero void toggleVSync(); // Alterna entre activar y desactivar el V-Sync auto decWindowZoom() -> bool; // Reduce el tamaño de la ventana diff --git a/source/core/system/director.cpp b/source/core/system/director.cpp index dd66a48..8b8081c 100644 --- a/source/core/system/director.cpp +++ b/source/core/system/director.cpp @@ -151,7 +151,7 @@ Director::Director() { // perquè la textura 256x192 no es vegi minúscula al canvas HTML, // i desactivem el borde per aprofitar al màxim l'espai del canvas. Options::video.fullscreen = false; - Options::video.integer_scale = false; + Options::video.integer_scale = true; Options::window.zoom = 4; Options::video.border.enabled = true; Options::video.border.height = 8; diff --git a/source/core/system/global_events.cpp b/source/core/system/global_events.cpp index 6247969..4602a16 100644 --- a/source/core/system/global_events.cpp +++ b/source/core/system/global_events.cpp @@ -2,11 +2,12 @@ #include "core/input/input.hpp" // Para Input (gamepad add/remove) #include "core/input/mouse.hpp" -#include "core/locale/locale.hpp" // Para Locale -#include "game/options.hpp" // Para Options, options, OptionsGame, OptionsAudio -#include "game/scene_manager.hpp" // Para SceneManager::current (filtrar BACK a GAME) -#include "game/ui/console.hpp" // Para Console -#include "game/ui/notifier.hpp" // Para Notifier +#include "core/locale/locale.hpp" // Para Locale +#include "core/rendering/screen.hpp" // Para Screen::handleWindowResized +#include "game/options.hpp" // Para Options, options, OptionsGame, OptionsAudio +#include "game/scene_manager.hpp" // Para SceneManager::current (filtrar BACK a GAME) +#include "game/ui/console.hpp" // Para Console +#include "game/ui/notifier.hpp" // Para Notifier namespace GlobalEvents { @@ -23,6 +24,13 @@ namespace GlobalEvents { // reLoadTextures(); } + // Canvi de mida de la finestra (fullscreen toggle extern, rotació del dispositiu, + // resize manual...). Re-sincronitzem el logical size del renderer i el zoom factor + // per evitar que la textura quedi estirada o desalineada amb el nou viewport. + if (event.type == SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED && Screen::get() != nullptr) { + Screen::get()->handleWindowResized(); + } + // Connexió/desconnexió de gamepads: cal enrutar-los a Input perquè // afegisca el dispositiu a gamepads_. Sense això, en wasm els gamepads // mai es detecten (la Gamepad API del navegador només els exposa