summaryrefslogtreecommitdiffhomepage
path: root/src/platforms
diff options
context:
space:
mode:
authorubkp <[email protected]>2023-12-11 05:11:42 -0300
committerGitHub <[email protected]>2023-12-11 09:11:42 +0100
commita2e45239c314f970ada62ef08bee72e6574d8808 (patch)
treec51f54b36f1da7b395ecad354e1a0e95c80190f2 /src/platforms
parent39457ace2f8048aa82d180040b1bce9ca59a6b74 (diff)
downloadraylib-a2e45239c314f970ada62ef08bee72e6574d8808.tar.gz
raylib-a2e45239c314f970ada62ef08bee72e6574d8808.zip
[rcore] Complement `SetWindowState()` and `ClearWindowState()` for `PLATFORM_WEB` (#3625)
* Complement SetWindowState() and ClearWindowState() for PLATFORM_WEB * Add FLAG_WINDOW_RESIZABLE to SetWindowState() and ClearWindowState() for PLATFORM_WEB
Diffstat (limited to 'src/platforms')
-rw-r--r--src/platforms/rcore_web.c206
1 files changed, 204 insertions, 2 deletions
diff --git a/src/platforms/rcore_web.c b/src/platforms/rcore_web.c
index c322a1d5..8ffceafd 100644
--- a/src/platforms/rcore_web.c
+++ b/src/platforms/rcore_web.c
@@ -261,13 +261,215 @@ void RestoreWindow(void)
// Set window configuration state using flags
void SetWindowState(unsigned int flags)
{
- TRACELOG(LOG_WARNING, "SetWindowState() not available on target platform");
+ // Check previous state and requested state to apply required changes
+ // NOTE: In most cases the functions already change the flags internally
+
+ // State change: FLAG_VSYNC_HINT
+ if ((flags & FLAG_VSYNC_HINT) > 0)
+ {
+ TRACELOG(LOG_WARNING, "SetWindowState(FLAG_VSYNC_HINT) not available on target platform");
+ }
+
+ // State change: FLAG_BORDERLESS_WINDOWED_MODE
+ if (((CORE.Window.flags & FLAG_BORDERLESS_WINDOWED_MODE) != (flags & FLAG_BORDERLESS_WINDOWED_MODE)) && ((flags & FLAG_BORDERLESS_WINDOWED_MODE) > 0))
+ {
+ ToggleBorderlessWindowed(); // NOTE: Window state flag updated inside function
+ }
+
+ // State change: FLAG_FULLSCREEN_MODE
+ if ((flags & FLAG_FULLSCREEN_MODE) > 0)
+ {
+ TRACELOG(LOG_WARNING, "SetWindowState(FLAG_FULLSCREEN_MODE) not available yet on target platform");
+ }
+
+ // State change: FLAG_WINDOW_RESIZABLE
+ if (((CORE.Window.flags & FLAG_WINDOW_RESIZABLE) != (flags & FLAG_WINDOW_RESIZABLE)) && ((flags & FLAG_WINDOW_RESIZABLE) > 0))
+ {
+ glfwSetWindowAttrib(platform.handle, GLFW_RESIZABLE, GLFW_TRUE);
+ CORE.Window.flags |= FLAG_WINDOW_RESIZABLE;
+ }
+
+ // State change: FLAG_WINDOW_UNDECORATED
+ if ((flags & FLAG_WINDOW_UNDECORATED) > 0)
+ {
+ TRACELOG(LOG_WARNING, "SetWindowState(FLAG_WINDOW_UNDECORATED) not available on target platform");
+ }
+
+ // State change: FLAG_WINDOW_HIDDEN
+ if ((flags & FLAG_WINDOW_HIDDEN) > 0)
+ {
+ TRACELOG(LOG_WARNING, "SetWindowState(FLAG_WINDOW_HIDDEN) not available on target platform");
+ }
+
+ // State change: FLAG_WINDOW_MINIMIZED
+ if ((flags & FLAG_WINDOW_MINIMIZED) > 0)
+ {
+ TRACELOG(LOG_WARNING, "SetWindowState(FLAG_WINDOW_MINIMIZED) not available on target platform");
+ }
+
+ // State change: FLAG_WINDOW_MAXIMIZED
+ if ((flags & FLAG_WINDOW_MAXIMIZED) > 0)
+ {
+ TRACELOG(LOG_WARNING, "SetWindowState(FLAG_WINDOW_MAXIMIZED) not available on target platform");
+ }
+
+ // State change: FLAG_WINDOW_UNFOCUSED
+ if ((flags & FLAG_WINDOW_UNFOCUSED) > 0)
+ {
+ TRACELOG(LOG_WARNING, "SetWindowState(FLAG_WINDOW_UNFOCUSED) not available on target platform");
+ }
+
+ // State change: FLAG_WINDOW_TOPMOST
+ if ((flags & FLAG_WINDOW_TOPMOST) > 0)
+ {
+ TRACELOG(LOG_WARNING, "SetWindowState(FLAG_WINDOW_TOPMOST) not available on target platform");
+ }
+
+ // State change: FLAG_WINDOW_ALWAYS_RUN
+ if ((flags & FLAG_WINDOW_ALWAYS_RUN) > 0)
+ {
+ TRACELOG(LOG_WARNING, "SetWindowState(FLAG_WINDOW_ALWAYS_RUN) not available on target platform");
+ }
+
+ // The following states can not be changed after window creation
+ // NOTE: Review for PLATFORM_WEB
+
+ // State change: FLAG_WINDOW_TRANSPARENT
+ if ((flags & FLAG_WINDOW_TRANSPARENT) > 0)
+ {
+ TRACELOG(LOG_WARNING, "SetWindowState(FLAG_WINDOW_TRANSPARENT) not available on target platform");
+ }
+
+ // State change: FLAG_WINDOW_HIGHDPI
+ if ((flags & FLAG_WINDOW_HIGHDPI) > 0)
+ {
+ TRACELOG(LOG_WARNING, "SetWindowState(FLAG_WINDOW_HIGHDPI) not available on target platform");
+ }
+
+ // State change: FLAG_WINDOW_MOUSE_PASSTHROUGH
+ if ((flags & FLAG_WINDOW_MOUSE_PASSTHROUGH) > 0)
+ {
+ TRACELOG(LOG_WARNING, "SetWindowState(FLAG_WINDOW_MOUSE_PASSTHROUGH) not available on target platform");
+ }
+
+ // State change: FLAG_MSAA_4X_HINT
+ if ((flags & FLAG_MSAA_4X_HINT) > 0)
+ {
+ TRACELOG(LOG_WARNING, "SetWindowState(FLAG_MSAA_4X_HINT) not available on target platform");
+ }
+
+ // State change: FLAG_INTERLACED_HINT
+ if ((flags & FLAG_INTERLACED_HINT) > 0)
+ {
+ TRACELOG(LOG_WARNING, "SetWindowState(FLAG_INTERLACED_HINT) not available on target platform");
+ }
}
// Clear window configuration state flags
void ClearWindowState(unsigned int flags)
{
- TRACELOG(LOG_WARNING, "ClearWindowState() not available on target platform");
+ // Check previous state and requested state to apply required changes
+ // NOTE: In most cases the functions already change the flags internally
+
+ // State change: FLAG_VSYNC_HINT
+ if ((flags & FLAG_VSYNC_HINT) > 0)
+ {
+ TRACELOG(LOG_WARNING, "ClearWindowState(FLAG_VSYNC_HINT) not available on target platform");
+ }
+
+ // State change: FLAG_BORDERLESS_WINDOWED_MODE
+ if (((CORE.Window.flags & FLAG_BORDERLESS_WINDOWED_MODE) > 0) && ((flags & FLAG_BORDERLESS_WINDOWED_MODE) > 0))
+ {
+ ToggleBorderlessWindowed(); // NOTE: Window state flag updated inside function
+ }
+
+ // State change: FLAG_FULLSCREEN_MODE
+ if ((flags & FLAG_FULLSCREEN_MODE) > 0)
+ {
+ TRACELOG(LOG_WARNING, "ClearWindowState(FLAG_FULLSCREEN_MODE) not available yet on target platform");
+ }
+
+ // State change: FLAG_WINDOW_RESIZABLE
+ if (((CORE.Window.flags & FLAG_WINDOW_RESIZABLE) > 0) && ((flags & FLAG_WINDOW_RESIZABLE) > 0))
+ {
+ glfwSetWindowAttrib(platform.handle, GLFW_RESIZABLE, GLFW_FALSE);
+ CORE.Window.flags &= ~FLAG_WINDOW_RESIZABLE;
+ }
+
+ // State change: FLAG_WINDOW_HIDDEN
+ if ((flags & FLAG_WINDOW_HIDDEN) > 0)
+ {
+ TRACELOG(LOG_WARNING, "ClearWindowState(FLAG_WINDOW_HIDDEN) not available on target platform");
+ }
+
+ // State change: FLAG_WINDOW_MINIMIZED
+ if ((flags & FLAG_WINDOW_MINIMIZED) > 0)
+ {
+ TRACELOG(LOG_WARNING, "ClearWindowState(FLAG_WINDOW_MINIMIZED) not available on target platform");
+ }
+
+ // State change: FLAG_WINDOW_MAXIMIZED
+ if ((flags & FLAG_WINDOW_MAXIMIZED) > 0)
+ {
+ TRACELOG(LOG_WARNING, "ClearWindowState(FLAG_WINDOW_MAXIMIZED) not available on target platform");
+ }
+
+ // State change: FLAG_WINDOW_UNDECORATED
+ if ((flags & FLAG_WINDOW_UNDECORATED) > 0)
+ {
+ TRACELOG(LOG_WARNING, "ClearWindowState(FLAG_WINDOW_UNDECORATED) not available on target platform");
+ }
+
+ // State change: FLAG_WINDOW_UNFOCUSED
+ if ((flags & FLAG_WINDOW_UNFOCUSED) > 0)
+ {
+ TRACELOG(LOG_WARNING, "ClearWindowState(FLAG_WINDOW_UNFOCUSED) not available on target platform");
+ }
+
+ // State change: FLAG_WINDOW_TOPMOST
+ if ((flags & FLAG_WINDOW_TOPMOST) > 0)
+ {
+ TRACELOG(LOG_WARNING, "ClearWindowState(FLAG_WINDOW_TOPMOST) not available on target platform");
+ }
+
+ // State change: FLAG_WINDOW_ALWAYS_RUN
+ if ((flags & FLAG_WINDOW_ALWAYS_RUN) > 0)
+ {
+ TRACELOG(LOG_WARNING, "ClearWindowState(FLAG_WINDOW_ALWAYS_RUN) not available on target platform");
+ }
+
+ // The following states can not be changed after window creation
+ // NOTE: Review for PLATFORM_WEB
+
+ // State change: FLAG_WINDOW_TRANSPARENT
+ if ((flags & FLAG_WINDOW_TRANSPARENT) > 0)
+ {
+ TRACELOG(LOG_WARNING, "ClearWindowState(FLAG_WINDOW_TRANSPARENT) not available on target platform");
+ }
+
+ // State change: FLAG_WINDOW_HIGHDPI
+ if ((flags & FLAG_WINDOW_HIGHDPI) > 0)
+ {
+ TRACELOG(LOG_WARNING, "ClearWindowState(FLAG_WINDOW_HIGHDPI) not available on target platform");
+ }
+
+ // State change: FLAG_WINDOW_MOUSE_PASSTHROUGH
+ if ((flags & FLAG_WINDOW_MOUSE_PASSTHROUGH) > 0)
+ {
+ TRACELOG(LOG_WARNING, "ClearWindowState(FLAG_WINDOW_MOUSE_PASSTHROUGH) not available on target platform");
+ }
+
+ // State change: FLAG_MSAA_4X_HINT
+ if ((flags & FLAG_MSAA_4X_HINT) > 0)
+ {
+ TRACELOG(LOG_WARNING, "ClearWindowState(FLAG_MSAA_4X_HINT) not available on target platform");
+ }
+
+ // State change: FLAG_INTERLACED_HINT
+ if ((flags & FLAG_INTERLACED_HINT) > 0)
+ {
+ TRACELOG(LOG_WARNING, "ClearWindowState(FLAG_INTERLACED_HINT) not available on target platform");
+ }
}
// Set icon for window