@@ -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