Move ToggleFullscreen out of rcore
This commit is contained in:
parent
92fd9eac06
commit
f6d30b5fbd
118
src/rcore.c
118
src/rcore.c
|
|
@ -437,124 +437,6 @@ bool IsWindowState(unsigned int flag)
|
||||||
return ((CORE.Window.flags & flag) > 0);
|
return ((CORE.Window.flags & flag) > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Toggle fullscreen mode (only PLATFORM_DESKTOP)
|
|
||||||
void ToggleFullscreen(void)
|
|
||||||
{
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
if (!CORE.Window.fullscreen)
|
|
||||||
{
|
|
||||||
// Store previous window position (in case we exit fullscreen)
|
|
||||||
glfwGetWindowPos(CORE.Window.handle, &CORE.Window.position.x, &CORE.Window.position.y);
|
|
||||||
|
|
||||||
int monitorCount = 0;
|
|
||||||
int monitorIndex = GetCurrentMonitor();
|
|
||||||
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
|
||||||
|
|
||||||
// Use current monitor, so we correctly get the display the window is on
|
|
||||||
GLFWmonitor *monitor = (monitorIndex < monitorCount)? monitors[monitorIndex] : NULL;
|
|
||||||
|
|
||||||
if (monitor == NULL)
|
|
||||||
{
|
|
||||||
TRACELOG(LOG_WARNING, "GLFW: Failed to get monitor");
|
|
||||||
|
|
||||||
CORE.Window.fullscreen = false;
|
|
||||||
CORE.Window.flags &= ~FLAG_FULLSCREEN_MODE;
|
|
||||||
|
|
||||||
glfwSetWindowMonitor(CORE.Window.handle, NULL, 0, 0, CORE.Window.screen.width, CORE.Window.screen.height, GLFW_DONT_CARE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
CORE.Window.fullscreen = true;
|
|
||||||
CORE.Window.flags |= FLAG_FULLSCREEN_MODE;
|
|
||||||
|
|
||||||
glfwSetWindowMonitor(CORE.Window.handle, monitor, 0, 0, CORE.Window.screen.width, CORE.Window.screen.height, GLFW_DONT_CARE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
CORE.Window.fullscreen = false;
|
|
||||||
CORE.Window.flags &= ~FLAG_FULLSCREEN_MODE;
|
|
||||||
|
|
||||||
glfwSetWindowMonitor(CORE.Window.handle, NULL, CORE.Window.position.x, CORE.Window.position.y, CORE.Window.screen.width, CORE.Window.screen.height, GLFW_DONT_CARE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try to enable GPU V-Sync, so frames are limited to screen refresh rate (60Hz -> 60 FPS)
|
|
||||||
// NOTE: V-Sync can be enabled by graphic driver configuration
|
|
||||||
if (CORE.Window.flags & FLAG_VSYNC_HINT) glfwSwapInterval(1);
|
|
||||||
#endif
|
|
||||||
#if defined(PLATFORM_WEB)
|
|
||||||
/*
|
|
||||||
EM_ASM
|
|
||||||
(
|
|
||||||
// This strategy works well while using raylib minimal web shell for emscripten,
|
|
||||||
// it re-scales the canvas to fullscreen using monitor resolution, for tools this
|
|
||||||
// is a good strategy but maybe games prefer to keep current canvas resolution and
|
|
||||||
// display it in fullscreen, adjusting monitor resolution if possible
|
|
||||||
if (document.fullscreenElement) document.exitFullscreen();
|
|
||||||
else Module.requestFullscreen(true, true); //false, true);
|
|
||||||
);
|
|
||||||
*/
|
|
||||||
//EM_ASM(Module.requestFullscreen(false, false););
|
|
||||||
/*
|
|
||||||
if (!CORE.Window.fullscreen)
|
|
||||||
{
|
|
||||||
// Option 1: Request fullscreen for the canvas element
|
|
||||||
// This option does not seem to work at all:
|
|
||||||
// emscripten_request_pointerlock() and emscripten_request_fullscreen() are affected by web security,
|
|
||||||
// the user must click once on the canvas to hide the pointer or transition to full screen
|
|
||||||
//emscripten_request_fullscreen("#canvas", false);
|
|
||||||
|
|
||||||
// Option 2: Request fullscreen for the canvas element with strategy
|
|
||||||
// This option does not seem to work at all
|
|
||||||
// Ref: https://github.com/emscripten-core/emscripten/issues/5124
|
|
||||||
// EmscriptenFullscreenStrategy strategy = {
|
|
||||||
// .scaleMode = EMSCRIPTEN_FULLSCREEN_SCALE_STRETCH, //EMSCRIPTEN_FULLSCREEN_SCALE_ASPECT,
|
|
||||||
// .canvasResolutionScaleMode = EMSCRIPTEN_FULLSCREEN_CANVAS_SCALE_STDDEF,
|
|
||||||
// .filteringMode = EMSCRIPTEN_FULLSCREEN_FILTERING_DEFAULT,
|
|
||||||
// .canvasResizedCallback = EmscriptenWindowResizedCallback,
|
|
||||||
// .canvasResizedCallbackUserData = NULL
|
|
||||||
// };
|
|
||||||
//emscripten_request_fullscreen_strategy("#canvas", EM_FALSE, &strategy);
|
|
||||||
|
|
||||||
// Option 3: Request fullscreen for the canvas element with strategy
|
|
||||||
// It works as expected but only inside the browser (client area)
|
|
||||||
EmscriptenFullscreenStrategy strategy = {
|
|
||||||
.scaleMode = EMSCRIPTEN_FULLSCREEN_SCALE_ASPECT,
|
|
||||||
.canvasResolutionScaleMode = EMSCRIPTEN_FULLSCREEN_CANVAS_SCALE_STDDEF,
|
|
||||||
.filteringMode = EMSCRIPTEN_FULLSCREEN_FILTERING_DEFAULT,
|
|
||||||
.canvasResizedCallback = EmscriptenWindowResizedCallback,
|
|
||||||
.canvasResizedCallbackUserData = NULL
|
|
||||||
};
|
|
||||||
emscripten_enter_soft_fullscreen("#canvas", &strategy);
|
|
||||||
|
|
||||||
int width, height;
|
|
||||||
emscripten_get_canvas_element_size("#canvas", &width, &height);
|
|
||||||
TRACELOG(LOG_WARNING, "Emscripten: Enter fullscreen: Canvas size: %i x %i", width, height);
|
|
||||||
|
|
||||||
CORE.Window.fullscreen = true; // Toggle fullscreen flag
|
|
||||||
CORE.Window.flags |= FLAG_FULLSCREEN_MODE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//emscripten_exit_fullscreen();
|
|
||||||
//emscripten_exit_soft_fullscreen();
|
|
||||||
|
|
||||||
int width, height;
|
|
||||||
emscripten_get_canvas_element_size("#canvas", &width, &height);
|
|
||||||
TRACELOG(LOG_WARNING, "Emscripten: Exit fullscreen: Canvas size: %i x %i", width, height);
|
|
||||||
|
|
||||||
CORE.Window.fullscreen = false; // Toggle fullscreen flag
|
|
||||||
CORE.Window.flags &= ~FLAG_FULLSCREEN_MODE;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
CORE.Window.fullscreen = !CORE.Window.fullscreen; // Toggle fullscreen flag
|
|
||||||
#endif
|
|
||||||
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_DRM)
|
|
||||||
TRACELOG(LOG_WARNING, "SYSTEM: Failed to toggle to windowed mode");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
// Toggle borderless windowed mode (only PLATFORM_DESKTOP)
|
// Toggle borderless windowed mode (only PLATFORM_DESKTOP)
|
||||||
void ToggleBorderlessWindowed(void)
|
void ToggleBorderlessWindowed(void)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1324,3 +1324,10 @@ bool IsWindowResized(void)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Toggle fullscreen mode (only PLATFORM_DESKTOP)
|
||||||
|
void ToggleFullscreen(void)
|
||||||
|
{
|
||||||
|
TRACELOG(LOG_WARNING, "SYSTEM: Failed to toggle to windowed mode");
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -552,3 +552,48 @@ bool IsWindowResized(void)
|
||||||
{
|
{
|
||||||
return CORE.Window.resizedLastFrame;
|
return CORE.Window.resizedLastFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Toggle fullscreen mode (only PLATFORM_DESKTOP)
|
||||||
|
void ToggleFullscreen(void)
|
||||||
|
{
|
||||||
|
if (!CORE.Window.fullscreen)
|
||||||
|
{
|
||||||
|
// Store previous window position (in case we exit fullscreen)
|
||||||
|
glfwGetWindowPos(CORE.Window.handle, &CORE.Window.position.x, &CORE.Window.position.y);
|
||||||
|
|
||||||
|
int monitorCount = 0;
|
||||||
|
int monitorIndex = GetCurrentMonitor();
|
||||||
|
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
||||||
|
|
||||||
|
// Use current monitor, so we correctly get the display the window is on
|
||||||
|
GLFWmonitor *monitor = (monitorIndex < monitorCount)? monitors[monitorIndex] : NULL;
|
||||||
|
|
||||||
|
if (monitor == NULL)
|
||||||
|
{
|
||||||
|
TRACELOG(LOG_WARNING, "GLFW: Failed to get monitor");
|
||||||
|
|
||||||
|
CORE.Window.fullscreen = false;
|
||||||
|
CORE.Window.flags &= ~FLAG_FULLSCREEN_MODE;
|
||||||
|
|
||||||
|
glfwSetWindowMonitor(CORE.Window.handle, NULL, 0, 0, CORE.Window.screen.width, CORE.Window.screen.height, GLFW_DONT_CARE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CORE.Window.fullscreen = true;
|
||||||
|
CORE.Window.flags |= FLAG_FULLSCREEN_MODE;
|
||||||
|
|
||||||
|
glfwSetWindowMonitor(CORE.Window.handle, monitor, 0, 0, CORE.Window.screen.width, CORE.Window.screen.height, GLFW_DONT_CARE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CORE.Window.fullscreen = false;
|
||||||
|
CORE.Window.flags &= ~FLAG_FULLSCREEN_MODE;
|
||||||
|
|
||||||
|
glfwSetWindowMonitor(CORE.Window.handle, NULL, CORE.Window.position.x, CORE.Window.position.y, CORE.Window.screen.width, CORE.Window.screen.height, GLFW_DONT_CARE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try to enable GPU V-Sync, so frames are limited to screen refresh rate (60Hz -> 60 FPS)
|
||||||
|
// NOTE: V-Sync can be enabled by graphic driver configuration
|
||||||
|
if (CORE.Window.flags & FLAG_VSYNC_HINT) glfwSwapInterval(1);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1042,3 +1042,10 @@ bool IsWindowResized(void)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Toggle fullscreen mode (only PLATFORM_DESKTOP)
|
||||||
|
void ToggleFullscreen(void)
|
||||||
|
{
|
||||||
|
TRACELOG(LOG_WARNING, "SYSTEM: Failed to toggle to windowed mode");
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1118,3 +1118,75 @@ bool IsWindowResized(void)
|
||||||
{
|
{
|
||||||
return CORE.Window.resizedLastFrame;
|
return CORE.Window.resizedLastFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Toggle fullscreen mode (only PLATFORM_DESKTOP)
|
||||||
|
void ToggleFullscreen(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
EM_ASM
|
||||||
|
(
|
||||||
|
// This strategy works well while using raylib minimal web shell for emscripten,
|
||||||
|
// it re-scales the canvas to fullscreen using monitor resolution, for tools this
|
||||||
|
// is a good strategy but maybe games prefer to keep current canvas resolution and
|
||||||
|
// display it in fullscreen, adjusting monitor resolution if possible
|
||||||
|
if (document.fullscreenElement) document.exitFullscreen();
|
||||||
|
else Module.requestFullscreen(true, true); //false, true);
|
||||||
|
);
|
||||||
|
*/
|
||||||
|
//EM_ASM(Module.requestFullscreen(false, false););
|
||||||
|
/*
|
||||||
|
if (!CORE.Window.fullscreen)
|
||||||
|
{
|
||||||
|
// Option 1: Request fullscreen for the canvas element
|
||||||
|
// This option does not seem to work at all:
|
||||||
|
// emscripten_request_pointerlock() and emscripten_request_fullscreen() are affected by web security,
|
||||||
|
// the user must click once on the canvas to hide the pointer or transition to full screen
|
||||||
|
//emscripten_request_fullscreen("#canvas", false);
|
||||||
|
|
||||||
|
// Option 2: Request fullscreen for the canvas element with strategy
|
||||||
|
// This option does not seem to work at all
|
||||||
|
// Ref: https://github.com/emscripten-core/emscripten/issues/5124
|
||||||
|
// EmscriptenFullscreenStrategy strategy = {
|
||||||
|
// .scaleMode = EMSCRIPTEN_FULLSCREEN_SCALE_STRETCH, //EMSCRIPTEN_FULLSCREEN_SCALE_ASPECT,
|
||||||
|
// .canvasResolutionScaleMode = EMSCRIPTEN_FULLSCREEN_CANVAS_SCALE_STDDEF,
|
||||||
|
// .filteringMode = EMSCRIPTEN_FULLSCREEN_FILTERING_DEFAULT,
|
||||||
|
// .canvasResizedCallback = EmscriptenWindowResizedCallback,
|
||||||
|
// .canvasResizedCallbackUserData = NULL
|
||||||
|
// };
|
||||||
|
//emscripten_request_fullscreen_strategy("#canvas", EM_FALSE, &strategy);
|
||||||
|
|
||||||
|
// Option 3: Request fullscreen for the canvas element with strategy
|
||||||
|
// It works as expected but only inside the browser (client area)
|
||||||
|
EmscriptenFullscreenStrategy strategy = {
|
||||||
|
.scaleMode = EMSCRIPTEN_FULLSCREEN_SCALE_ASPECT,
|
||||||
|
.canvasResolutionScaleMode = EMSCRIPTEN_FULLSCREEN_CANVAS_SCALE_STDDEF,
|
||||||
|
.filteringMode = EMSCRIPTEN_FULLSCREEN_FILTERING_DEFAULT,
|
||||||
|
.canvasResizedCallback = EmscriptenWindowResizedCallback,
|
||||||
|
.canvasResizedCallbackUserData = NULL
|
||||||
|
};
|
||||||
|
emscripten_enter_soft_fullscreen("#canvas", &strategy);
|
||||||
|
|
||||||
|
int width, height;
|
||||||
|
emscripten_get_canvas_element_size("#canvas", &width, &height);
|
||||||
|
TRACELOG(LOG_WARNING, "Emscripten: Enter fullscreen: Canvas size: %i x %i", width, height);
|
||||||
|
|
||||||
|
CORE.Window.fullscreen = true; // Toggle fullscreen flag
|
||||||
|
CORE.Window.flags |= FLAG_FULLSCREEN_MODE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//emscripten_exit_fullscreen();
|
||||||
|
//emscripten_exit_soft_fullscreen();
|
||||||
|
|
||||||
|
int width, height;
|
||||||
|
emscripten_get_canvas_element_size("#canvas", &width, &height);
|
||||||
|
TRACELOG(LOG_WARNING, "Emscripten: Exit fullscreen: Canvas size: %i x %i", width, height);
|
||||||
|
|
||||||
|
CORE.Window.fullscreen = false; // Toggle fullscreen flag
|
||||||
|
CORE.Window.flags &= ~FLAG_FULLSCREEN_MODE;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
CORE.Window.fullscreen = !CORE.Window.fullscreen; // Toggle fullscreen flag
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user