Skip to content

Commit 0df78d4

Browse files
author
ubkp
authored
Fix fullscreen known issue 1 for PLATFORM_WEB (raysan5#3642)
1 parent fd84ab3 commit 0df78d4

File tree

1 file changed

+61
-14
lines changed

1 file changed

+61
-14
lines changed

src/platforms/rcore_web.c

Lines changed: 61 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,17 @@ void ToggleFullscreen(void)
147147
const bool wasFullscreen = EM_ASM_INT( { if (document.fullscreenElement) return 1; }, 0);
148148
if (wasFullscreen)
149149
{
150-
EM_ASM(document.exitFullscreen(););
151-
152150
if (CORE.Window.flags & FLAG_FULLSCREEN_MODE) enterFullscreen = false;
153-
else enterFullscreen = true;
151+
else if (CORE.Window.flags & FLAG_BORDERLESS_WINDOWED_MODE) enterFullscreen = true;
152+
else
153+
{
154+
const int canvasWidth = EM_ASM_INT( { return document.getElementById('canvas').width; }, 0);
155+
const int canvasStyleWidth = EM_ASM_INT( { return parseInt(document.getElementById('canvas').style.width); }, 0);
156+
if (canvasStyleWidth > canvasWidth) enterFullscreen = false;
157+
else enterFullscreen = true;
158+
}
159+
160+
EM_ASM(document.exitFullscreen(););
154161

155162
CORE.Window.fullscreen = false;
156163
CORE.Window.flags &= ~FLAG_FULLSCREEN_MODE;
@@ -247,10 +254,17 @@ void ToggleBorderlessWindowed(void)
247254
const bool wasFullscreen = EM_ASM_INT( { if (document.fullscreenElement) return 1; }, 0);
248255
if (wasFullscreen)
249256
{
250-
EM_ASM(document.exitFullscreen(););
251-
252257
if (CORE.Window.flags & FLAG_BORDERLESS_WINDOWED_MODE) enterBorderless = false;
253-
else enterBorderless = true;
258+
else if (CORE.Window.flags & FLAG_FULLSCREEN_MODE) enterBorderless = true;
259+
else
260+
{
261+
const int canvasWidth = EM_ASM_INT( { return document.getElementById('canvas').width; }, 0);
262+
const int screenWidth = EM_ASM_INT( { return screen.width; }, 0);
263+
if (screenWidth == canvasWidth) enterBorderless = false;
264+
else enterBorderless = true;
265+
}
266+
267+
EM_ASM(document.exitFullscreen(););
254268

255269
CORE.Window.fullscreen = false;
256270
CORE.Window.flags &= ~FLAG_FULLSCREEN_MODE;
@@ -307,15 +321,31 @@ void SetWindowState(unsigned int flags)
307321
}
308322

309323
// State change: FLAG_BORDERLESS_WINDOWED_MODE
310-
if (((CORE.Window.flags & FLAG_BORDERLESS_WINDOWED_MODE) != (flags & FLAG_BORDERLESS_WINDOWED_MODE)) && ((flags & FLAG_BORDERLESS_WINDOWED_MODE) > 0))
324+
if ((flags & FLAG_BORDERLESS_WINDOWED_MODE) > 0)
311325
{
312-
ToggleBorderlessWindowed(); // NOTE: Window state flag updated inside function
326+
// NOTE: Window state flag updated inside ToggleBorderlessWindowed() function
327+
const bool wasFullscreen = EM_ASM_INT( { if (document.fullscreenElement) return 1; }, 0);
328+
if (wasFullscreen)
329+
{
330+
const int canvasWidth = EM_ASM_INT( { return document.getElementById('canvas').width; }, 0);
331+
const int canvasStyleWidth = EM_ASM_INT( { return parseInt(document.getElementById('canvas').style.width); }, 0);
332+
if ((CORE.Window.flags & FLAG_FULLSCREEN_MODE) || canvasStyleWidth > canvasWidth) ToggleBorderlessWindowed();
333+
}
334+
else ToggleBorderlessWindowed();
313335
}
314336

315337
// State change: FLAG_FULLSCREEN_MODE
316-
if ((CORE.Window.flags & FLAG_FULLSCREEN_MODE) != (flags & FLAG_FULLSCREEN_MODE))
338+
if ((flags & FLAG_FULLSCREEN_MODE) > 0)
317339
{
318-
ToggleFullscreen(); // NOTE: Window state flag updated inside function
340+
// NOTE: Window state flag updated inside ToggleFullscreen() function
341+
const bool wasFullscreen = EM_ASM_INT( { if (document.fullscreenElement) return 1; }, 0);
342+
if (wasFullscreen)
343+
{
344+
const int canvasWidth = EM_ASM_INT( { return document.getElementById('canvas').width; }, 0);
345+
const int screenWidth = EM_ASM_INT( { return screen.width; }, 0);
346+
if ((CORE.Window.flags & FLAG_BORDERLESS_WINDOWED_MODE) || screenWidth == canvasWidth ) ToggleFullscreen();
347+
}
348+
else ToggleFullscreen();
319349
}
320350

321351
// State change: FLAG_WINDOW_RESIZABLE
@@ -414,15 +444,32 @@ void ClearWindowState(unsigned int flags)
414444
}
415445

416446
// State change: FLAG_BORDERLESS_WINDOWED_MODE
417-
if (((CORE.Window.flags & FLAG_BORDERLESS_WINDOWED_MODE) > 0) && ((flags & FLAG_BORDERLESS_WINDOWED_MODE) > 0))
447+
if ((flags & FLAG_BORDERLESS_WINDOWED_MODE) > 0)
418448
{
419-
ToggleBorderlessWindowed(); // NOTE: Window state flag updated inside function
449+
const bool wasFullscreen = EM_ASM_INT( { if (document.fullscreenElement) return 1; }, 0);
450+
if (wasFullscreen)
451+
{
452+
const int canvasWidth = EM_ASM_INT( { return document.getElementById('canvas').width; }, 0);
453+
const int screenWidth = EM_ASM_INT( { return screen.width; }, 0);
454+
if ((CORE.Window.flags & FLAG_BORDERLESS_WINDOWED_MODE) || (screenWidth == canvasWidth)) EM_ASM(document.exitFullscreen(););
455+
}
456+
457+
CORE.Window.flags &= ~FLAG_BORDERLESS_WINDOWED_MODE;
420458
}
421459

422460
// State change: FLAG_FULLSCREEN_MODE
423-
if (((CORE.Window.flags & FLAG_FULLSCREEN_MODE) > 0) && ((flags & FLAG_FULLSCREEN_MODE) > 0))
461+
if ((flags & FLAG_FULLSCREEN_MODE) > 0)
424462
{
425-
ToggleFullscreen(); // NOTE: Window state flag updated inside function
463+
const bool wasFullscreen = EM_ASM_INT( { if (document.fullscreenElement) return 1; }, 0);
464+
if (wasFullscreen)
465+
{
466+
const int canvasWidth = EM_ASM_INT( { return document.getElementById('canvas').width; }, 0);
467+
const int canvasStyleWidth = EM_ASM_INT( { return parseInt(document.getElementById('canvas').style.width); }, 0);
468+
if ((CORE.Window.flags & FLAG_FULLSCREEN_MODE) || (canvasStyleWidth > canvasWidth)) EM_ASM(document.exitFullscreen(););
469+
}
470+
471+
CORE.Window.fullscreen = false;
472+
CORE.Window.flags &= ~FLAG_FULLSCREEN_MODE;
426473
}
427474

428475
// State change: FLAG_WINDOW_RESIZABLE

0 commit comments

Comments
 (0)