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);
|
||||
}
|
||||
|
||||
// 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)
|
||||
void ToggleBorderlessWindowed(void)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1324,3 +1324,10 @@ bool IsWindowResized(void)
|
|||
{
|
||||
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;
|
||||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
|
||||
// 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