|
@@ -724,7 +724,7 @@ void *GetWindowHandle(void)
|
|
return glfwGetWin32Window(platform.handle);
|
|
return glfwGetWin32Window(platform.handle);
|
|
#endif
|
|
#endif
|
|
#if defined(__linux__)
|
|
#if defined(__linux__)
|
|
- // Store the window handle localy and return a pointer to the variable instead.
|
|
|
|
|
|
+ // Store the window handle localy and return a pointer to the variable instead
|
|
// Reasoning detailed in the declaration of X11WindowHandle
|
|
// Reasoning detailed in the declaration of X11WindowHandle
|
|
X11WindowHandle = glfwGetX11Window(platform.handle);
|
|
X11WindowHandle = glfwGetX11Window(platform.handle);
|
|
return &X11WindowHandle;
|
|
return &X11WindowHandle;
|
|
@@ -1066,9 +1066,9 @@ double GetTime(void)
|
|
}
|
|
}
|
|
|
|
|
|
// Open URL with default system browser (if available)
|
|
// Open URL with default system browser (if available)
|
|
-// NOTE: This function is only safe to use if you control the URL given.
|
|
|
|
-// A user could craft a malicious string performing another action.
|
|
|
|
-// Only call this function yourself not with user input or make sure to check the string yourself.
|
|
|
|
|
|
+// NOTE: This function is only safe to use if you control the URL given
|
|
|
|
+// A user could craft a malicious string performing another action
|
|
|
|
+// Only call this function yourself not with user input or make sure to check the string yourself
|
|
// Ref: https://github.com/raysan5/raylib/issues/686
|
|
// Ref: https://github.com/raysan5/raylib/issues/686
|
|
void OpenURL(const char *url)
|
|
void OpenURL(const char *url)
|
|
{
|
|
{
|
|
@@ -1130,7 +1130,7 @@ void SetMouseCursor(int cursor)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-// Get physical key name.
|
|
|
|
|
|
+// Get physical key name
|
|
const char *GetKeyName(int key)
|
|
const char *GetKeyName(int key)
|
|
{
|
|
{
|
|
return glfwGetKeyName(key, glfwGetKeyScancode(key));
|
|
return glfwGetKeyName(key, glfwGetKeyScancode(key));
|
|
@@ -1306,8 +1306,8 @@ static void SetDimensionsFromMonitor(GLFWmonitor *monitor)
|
|
}
|
|
}
|
|
|
|
|
|
// Function wrappers around RL_*alloc macros, used by glfwInitAllocator() inside of InitPlatform()
|
|
// Function wrappers around RL_*alloc macros, used by glfwInitAllocator() inside of InitPlatform()
|
|
-// We need to provide these because GLFWallocator expects function pointers with specific signatures.
|
|
|
|
-// Similar wrappers exist in utils.c but we cannot reuse them here due to declaration mismatch.
|
|
|
|
|
|
+// We need to provide these because GLFWallocator expects function pointers with specific signatures
|
|
|
|
+// Similar wrappers exist in utils.c but we cannot reuse them here due to declaration mismatch
|
|
// https://www.glfw.org/docs/latest/intro_guide.html#init_allocator
|
|
// https://www.glfw.org/docs/latest/intro_guide.html#init_allocator
|
|
static void *AllocateWrapper(size_t size, void *user)
|
|
static void *AllocateWrapper(size_t size, void *user)
|
|
{
|
|
{
|
|
@@ -1394,15 +1394,15 @@ int InitPlatform(void)
|
|
// HACK: Most of this was written before GLFW_SCALE_FRAMEBUFFER existed and
|
|
// HACK: Most of this was written before GLFW_SCALE_FRAMEBUFFER existed and
|
|
// was enabled by default. Disabling it gets back the old behavior. A
|
|
// was enabled by default. Disabling it gets back the old behavior. A
|
|
// complete fix will require removing a lot of CORE.Window.render
|
|
// complete fix will require removing a lot of CORE.Window.render
|
|
- // manipulation code.
|
|
|
|
|
|
+ // manipulation code
|
|
glfwWindowHint(GLFW_SCALE_FRAMEBUFFER, GLFW_FALSE);
|
|
glfwWindowHint(GLFW_SCALE_FRAMEBUFFER, GLFW_FALSE);
|
|
|
|
|
|
if ((CORE.Window.flags & FLAG_WINDOW_HIGHDPI) > 0)
|
|
if ((CORE.Window.flags & FLAG_WINDOW_HIGHDPI) > 0)
|
|
{
|
|
{
|
|
- // Resize window content area based on the monitor content scale.
|
|
|
|
- // NOTE: This hint only has an effect on platforms where screen coordinates and pixels always map 1:1 such as Windows and X11.
|
|
|
|
- // On platforms like macOS the resolution of the framebuffer is changed independently of the window size.
|
|
|
|
- glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_TRUE); // Scale content area based on the monitor content scale where window is placed on
|
|
|
|
|
|
+ // Resize window content area based on the monitor content scale
|
|
|
|
+ // NOTE: This hint only has an effect on platforms where screen coordinates and pixels always map 1:1 such as Windows and X11
|
|
|
|
+ // On platforms like macOS the resolution of the framebuffer is changed independently of the window size
|
|
|
|
+ glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_TRUE); // Scale content area based on the monitor content scale where window is placed on
|
|
#if defined(__APPLE__)
|
|
#if defined(__APPLE__)
|
|
glfwWindowHint(GLFW_SCALE_FRAMEBUFFER, GLFW_TRUE);
|
|
glfwWindowHint(GLFW_SCALE_FRAMEBUFFER, GLFW_TRUE);
|
|
#endif
|
|
#endif
|
|
@@ -1421,8 +1421,8 @@ int InitPlatform(void)
|
|
}
|
|
}
|
|
|
|
|
|
// NOTE: When asking for an OpenGL context version, most drivers provide the highest supported version
|
|
// NOTE: When asking for an OpenGL context version, most drivers provide the highest supported version
|
|
- // with backward compatibility to older OpenGL versions.
|
|
|
|
- // For example, if using OpenGL 1.1, driver can provide a 4.3 backwards compatible context.
|
|
|
|
|
|
+ // with backward compatibility to older OpenGL versions
|
|
|
|
+ // For example, if using OpenGL 1.1, driver can provide a 4.3 backwards compatible context
|
|
|
|
|
|
// Check selection OpenGL version
|
|
// Check selection OpenGL version
|
|
if (rlGetVersion() == RL_OPENGL_21)
|
|
if (rlGetVersion() == RL_OPENGL_21)
|
|
@@ -1468,9 +1468,9 @@ int InitPlatform(void)
|
|
glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_EGL_CONTEXT_API);
|
|
glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_EGL_CONTEXT_API);
|
|
}
|
|
}
|
|
|
|
|
|
- // NOTE: GLFW 3.4+ defers initialization of the Joystick subsystem on the first call to any Joystick related functions.
|
|
|
|
- // Forcing this initialization here avoids doing it on PollInputEvents() called by EndDrawing() after first frame has been just drawn.
|
|
|
|
- // The initialization will still happen and possible delays still occur, but before the window is shown, which is a nicer experience.
|
|
|
|
|
|
+ // NOTE: GLFW 3.4+ defers initialization of the Joystick subsystem on the first call to any Joystick related functions
|
|
|
|
+ // Forcing this initialization here avoids doing it on PollInputEvents() called by EndDrawing() after first frame has been just drawn
|
|
|
|
+ // The initialization will still happen and possible delays still occur, but before the window is shown, which is a nicer experience
|
|
// REF: https://github.com/raysan5/raylib/issues/1554
|
|
// REF: https://github.com/raysan5/raylib/issues/1554
|
|
glfwSetJoystickCallback(NULL);
|
|
glfwSetJoystickCallback(NULL);
|
|
|
|
|
|
@@ -1478,7 +1478,7 @@ int InitPlatform(void)
|
|
if (CORE.Window.fullscreen)
|
|
if (CORE.Window.fullscreen)
|
|
{
|
|
{
|
|
// According to glfwCreateWindow(), if the user does not have a choice, fullscreen applications
|
|
// According to glfwCreateWindow(), if the user does not have a choice, fullscreen applications
|
|
- // should default to the primary monitor.
|
|
|
|
|
|
+ // should default to the primary monitor
|
|
|
|
|
|
monitor = glfwGetPrimaryMonitor();
|
|
monitor = glfwGetPrimaryMonitor();
|
|
if (!monitor)
|
|
if (!monitor)
|
|
@@ -1492,8 +1492,8 @@ int InitPlatform(void)
|
|
// Remember center for switching from fullscreen to window
|
|
// Remember center for switching from fullscreen to window
|
|
if ((CORE.Window.screen.height == CORE.Window.display.height) && (CORE.Window.screen.width == CORE.Window.display.width))
|
|
if ((CORE.Window.screen.height == CORE.Window.display.height) && (CORE.Window.screen.width == CORE.Window.display.width))
|
|
{
|
|
{
|
|
- // If screen width/height equal to the display, we can't calculate the window pos for toggling full-screened/windowed.
|
|
|
|
- // Toggling full-screened/windowed with pos(0, 0) can cause problems in some platforms, such as X11.
|
|
|
|
|
|
+ // If screen width/height equal to the display, we can't calculate the window pos for toggling full-screened/windowed
|
|
|
|
+ // Toggling full-screened/windowed with pos(0, 0) can cause problems in some platforms, such as X11
|
|
CORE.Window.position.x = CORE.Window.display.width/4;
|
|
CORE.Window.position.x = CORE.Window.display.width/4;
|
|
CORE.Window.position.y = CORE.Window.display.height/4;
|
|
CORE.Window.position.y = CORE.Window.display.height/4;
|
|
}
|
|
}
|
|
@@ -1554,7 +1554,7 @@ int InitPlatform(void)
|
|
// No-fullscreen window creation
|
|
// No-fullscreen window creation
|
|
bool requestWindowedFullscreen = (CORE.Window.screen.height == 0) && (CORE.Window.screen.width == 0);
|
|
bool requestWindowedFullscreen = (CORE.Window.screen.height == 0) && (CORE.Window.screen.width == 0);
|
|
|
|
|
|
- // Default to at least one pixel in size, as creation with a zero dimension is not allowed.
|
|
|
|
|
|
+ // Default to at least one pixel in size, as creation with a zero dimension is not allowed
|
|
int creationWidth = CORE.Window.screen.width != 0 ? CORE.Window.screen.width : 1;
|
|
int creationWidth = CORE.Window.screen.width != 0 ? CORE.Window.screen.width : 1;
|
|
int creationHeight = CORE.Window.screen.height != 0 ? CORE.Window.screen.height : 1;
|
|
int creationHeight = CORE.Window.screen.height != 0 ? CORE.Window.screen.height : 1;
|
|
|
|
|
|
@@ -1566,8 +1566,8 @@ int InitPlatform(void)
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|
|
- // After the window was created, determine the monitor that the window manager assigned.
|
|
|
|
- // Derive display sizes, and, if possible, window size in case it was zero at beginning.
|
|
|
|
|
|
+ // After the window was created, determine the monitor that the window manager assigned
|
|
|
|
+ // Derive display sizes, and, if possible, window size in case it was zero at beginning
|
|
|
|
|
|
int monitorCount = 0;
|
|
int monitorCount = 0;
|
|
int monitorIndex = GetCurrentMonitor();
|
|
int monitorIndex = GetCurrentMonitor();
|
|
@@ -1582,7 +1582,7 @@ int InitPlatform(void)
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- // The monitor for the window-manager-created window can not be determined, so it can not be centered.
|
|
|
|
|
|
+ // The monitor for the window-manager-created window can not be determined, so it can not be centered
|
|
glfwTerminate();
|
|
glfwTerminate();
|
|
TRACELOG(LOG_WARNING, "GLFW: Failed to determine Monitor to center Window");
|
|
TRACELOG(LOG_WARNING, "GLFW: Failed to determine Monitor to center Window");
|
|
return -1;
|
|
return -1;
|
|
@@ -1604,7 +1604,7 @@ int InitPlatform(void)
|
|
|
|
|
|
// Try to enable GPU V-Sync, so frames are limited to screen refresh rate (60Hz -> 60 FPS)
|
|
// 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, it doesn't need
|
|
// NOTE: V-Sync can be enabled by graphic driver configuration, it doesn't need
|
|
- // to be activated on web platforms since VSync is enforced there.
|
|
|
|
|
|
+ // to be activated on web platforms since VSync is enforced there
|
|
if (CORE.Window.flags & FLAG_VSYNC_HINT)
|
|
if (CORE.Window.flags & FLAG_VSYNC_HINT)
|
|
{
|
|
{
|
|
// WARNING: It seems to hit a critical render path in Intel HD Graphics
|
|
// WARNING: It seems to hit a critical render path in Intel HD Graphics
|
|
@@ -1617,7 +1617,7 @@ int InitPlatform(void)
|
|
|
|
|
|
if ((CORE.Window.flags & FLAG_WINDOW_HIGHDPI) > 0)
|
|
if ((CORE.Window.flags & FLAG_WINDOW_HIGHDPI) > 0)
|
|
{
|
|
{
|
|
- // NOTE: On APPLE platforms system should manage window/input scaling and also framebuffer scaling.
|
|
|
|
|
|
+ // NOTE: On APPLE platforms system should manage window/input scaling and also framebuffer scaling
|
|
// Framebuffer scaling should be activated with: glfwWindowHint(GLFW_SCALE_FRAMEBUFFER, GLFW_TRUE);
|
|
// Framebuffer scaling should be activated with: glfwWindowHint(GLFW_SCALE_FRAMEBUFFER, GLFW_TRUE);
|
|
#if !defined(__APPLE__)
|
|
#if !defined(__APPLE__)
|
|
glfwGetFramebufferSize(platform.handle, &fbWidth, &fbHeight);
|
|
glfwGetFramebufferSize(platform.handle, &fbWidth, &fbHeight);
|
|
@@ -1660,7 +1660,8 @@ int InitPlatform(void)
|
|
int monitorHeight = 0;
|
|
int monitorHeight = 0;
|
|
glfwGetMonitorWorkarea(monitor, &monitorX, &monitorY, &monitorWidth, &monitorHeight);
|
|
glfwGetMonitorWorkarea(monitor, &monitorX, &monitorY, &monitorWidth, &monitorHeight);
|
|
|
|
|
|
- // Here CORE.Window.render.width/height should be used instead of CORE.Window.screen.width/height to center the window correctly when the high dpi flag is enabled.
|
|
|
|
|
|
+ // Here CORE.Window.render.width/height should be used instead of
|
|
|
|
+ // CORE.Window.screen.width/height to center the window correctly when the high dpi flag is enabled
|
|
int posX = monitorX + (monitorWidth - (int)CORE.Window.render.width)/2;
|
|
int posX = monitorX + (monitorWidth - (int)CORE.Window.render.width)/2;
|
|
int posY = monitorY + (monitorHeight - (int)CORE.Window.render.height)/2;
|
|
int posY = monitorY + (monitorHeight - (int)CORE.Window.render.height)/2;
|
|
if (posX < monitorX) posX = monitorX;
|
|
if (posX < monitorX) posX = monitorX;
|