From 287772f5e9f8f0cac21f4c58f3016cfcace44f13 Mon Sep 17 00:00:00 2001 From: Daid Date: Thu, 9 Apr 2020 15:01:45 +0100 Subject: [PATCH] emscripten: Let SDL_GetDisplayUsableBounds return the size of the window This does not account for scrollbars nor margins. But is much better then returning the full display size when not running fullscreen, but for example in an iframe. --- src/video/emscripten/SDL_emscriptenvideo.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/video/emscripten/SDL_emscriptenvideo.c b/src/video/emscripten/SDL_emscriptenvideo.c index 753539032..295032f87 100644 --- a/src/video/emscripten/SDL_emscriptenvideo.c +++ b/src/video/emscripten/SDL_emscriptenvideo.c @@ -42,6 +42,7 @@ static int Emscripten_VideoInit(_THIS); static int Emscripten_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode); static void Emscripten_VideoQuit(_THIS); +static int Emscripten_GetDisplayUsableBounds(_THIS, SDL_VideoDisplay * display, SDL_Rect * rect); static int Emscripten_CreateWindow(_THIS, SDL_Window * window); static void Emscripten_SetWindowSize(_THIS, SDL_Window * window); @@ -86,6 +87,7 @@ Emscripten_CreateDevice(int devindex) /* Set the function pointers */ device->VideoInit = Emscripten_VideoInit; device->VideoQuit = Emscripten_VideoQuit; + device->GetDisplayUsableBounds = Emscripten_GetDisplayUsableBounds; device->SetDisplayMode = Emscripten_SetDisplayMode; @@ -177,6 +179,22 @@ Emscripten_VideoQuit(_THIS) Emscripten_FiniMouse(); } +static int +Emscripten_GetDisplayUsableBounds(_THIS, SDL_VideoDisplay * display, SDL_Rect * rect) +{ + if (rect) { + rect->x = 0; + rect->y = 0; + rect->w = EM_ASM_INT_V({ + return window.innerWidth; + }); + rect->h = EM_ASM_INT_V({ + return window.innerHeight; + }); + } + return 0; +} + static void Emscripten_PumpEvents(_THIS) {