DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit ed6a093adea616cc856ef0ccb7a508410f017620
parent 644f0659730964e74d93639c7d08a92ce4a1a234
Author: falkTX <falktx@falktx.com>
Date:   Sat,  8 Jul 2023 16:27:37 +0200

Fix wasm fullscreen behaviour

Signed-off-by: falkTX <falktx@falktx.com>

Diffstat:
Mdgl/src/pugl-extra/wasm.c | 68+++++++++++++++++++++++++++++++++++++++++++++++---------------------
1 file changed, 47 insertions(+), 21 deletions(-)

diff --git a/dgl/src/pugl-extra/wasm.c b/dgl/src/pugl-extra/wasm.c @@ -604,18 +604,27 @@ puglUiCallback(const int eventType, const EmscriptenUiEvent* const uiEvent, void { PuglView* const view = (PuglView*)userData; const char* const className = view->world->className; + const bool isFullscreen = view->impl->isFullscreen; // FIXME const int width = EM_ASM_INT({ var canvasWrapper = document.getElementById(UTF8ToString($0)).parentElement; canvasWrapper.style.setProperty("--device-pixel-ratio", window.devicePixelRatio); - return canvasWrapper.clientWidth; - }, className); + if ($1) { + return window.innerWidth; + } else { + return canvasWrapper.clientWidth; + } + }, className, isFullscreen); const int height = EM_ASM_INT({ - var canvasWrapper = document.getElementById(UTF8ToString($0)).parentElement; - return canvasWrapper.clientHeight; - }, className); + if ($1) { + return window.innerHeight; + } else { + var canvasWrapper = document.getElementById(UTF8ToString($0)).parentElement; + return canvasWrapper.clientHeight; + } + }, className, isFullscreen); if (!width || !height) return EM_FALSE; @@ -634,6 +643,15 @@ puglUiCallback(const int eventType, const EmscriptenUiEvent* const uiEvent, void puglDispatchEvent(view, &event); emscripten_set_canvas_element_size(view->world->className, width * scaleFactor, height * scaleFactor); + +#ifdef __MOD_DEVICES__ + if (isFullscreen) { + EM_ASM({ + document.getElementById("pedalboard-dashboard").style.transform = "scale(1.0)"; + }); + } +#endif + return EM_TRUE; } @@ -641,6 +659,7 @@ static EM_BOOL puglFullscreenChangeCallback(const int eventType, const EmscriptenFullscreenChangeEvent* const fscEvent, void* const userData) { PuglView* const view = (PuglView*)userData; + const char* const className = view->world->className; view->impl->isFullscreen = fscEvent->isFullscreen; @@ -648,29 +667,36 @@ puglFullscreenChangeCallback(const int eventType, const EmscriptenFullscreenChan #ifdef __MOD_DEVICES__ scaleFactor *= MOD_SCALE_FACTOR_MULT; #endif + view->world->impl->scaleFactor = scaleFactor; - if (fscEvent->isFullscreen) { - PuglEvent event = {{PUGL_CONFIGURE, 0}}; - event.configure.x = 0; - event.configure.y = 0; - event.configure.width = fscEvent->elementWidth * scaleFactor; - event.configure.height = fscEvent->elementHeight * scaleFactor; - puglDispatchEvent(view, &event); + if (!fscEvent->isFullscreen) + return puglUiCallback(0, NULL, userData); - emscripten_set_canvas_element_size(view->world->className, - fscEvent->elementWidth * scaleFactor, - fscEvent->elementHeight * scaleFactor); + const int width = EM_ASM_INT({ + return window.innerWidth; + }); + + const int height = EM_ASM_INT({ + return window.innerHeight; + }); + + PuglEvent event = {{PUGL_CONFIGURE, 0}}; + event.configure.x = 0; + event.configure.y = 0; + event.configure.width = width; + event.configure.height = height; + puglDispatchEvent(view, &event); + + emscripten_set_canvas_element_size(view->world->className, width, height); #ifdef __MOD_DEVICES__ - EM_ASM({ - document.getElementById("pedalboard-dashboard").style.transform = "scale(1.0)"; - }); + EM_ASM({ + document.getElementById("pedalboard-dashboard").style.transform = "scale(1.0)"; + }); #endif - return EM_TRUE; - } - return puglUiCallback(0, NULL, userData); + return EM_TRUE; } static EM_BOOL