@ -109,6 +109,7 @@ static void ErrorCallback(int error, const char *description);
/ / Window callbacks events
static void WindowSizeCallback ( GLFWwindow * window , int width , int height ) ; / / GLFW3 WindowSize Callback , runs when window is resized
static void WindowPosCallback ( GLFWwindow * window , int x , int y ) ; / / GLFW3 WindowPos Callback , runs when window is moved
static void WindowIconifyCallback ( GLFWwindow * window , int iconified ) ; / / GLFW3 WindowIconify Callback , runs when window is minimized / restored
static void WindowMaximizeCallback ( GLFWwindow * window , int maximized ) ; / / GLFW3 Window Maximize Callback , runs when window is maximized
static void WindowFocusCallback ( GLFWwindow * window , int focused ) ; / / GLFW3 WindowFocus Callback , runs when window get / lose focus
@ -147,8 +148,8 @@ void ToggleFullscreen(void)
if ( ! CORE . Window . fullscreen )
{
/ / Store previous window position ( in case we exit fullscreen )
glfwGetWindowPos ( platform . handle , & CORE. Window . position . x , & CORE . Window . position. y ) ;
CORE . Window . previousPosition = CORE . Window . position ;
int monitorCount = 0 ;
int monitorIndex = GetCurrentMonitor ( ) ;
GLFWmonitor * * monitors = glfwGetMonitors ( & monitorCount ) ;
@ -179,7 +180,11 @@ void ToggleFullscreen(void)
CORE . Window . fullscreen = false ;
CORE . Window . flags & = ~ FLAG_FULLSCREEN_MODE ;
glfwSetWindowMonitor ( platform . handle , NULL , CORE . Window . position . x , CORE . Window . position . y , CORE . Window . screen . width , CORE . Window . screen . height , GLFW_DONT_CARE ) ;
glfwSetWindowMonitor ( platform . handle , NULL , CORE . Window . previousPosition . x , CORE . Window . previousPosition . y , CORE . Window . screen . width , CORE . Window . screen . height , GLFW_DONT_CARE ) ;
/ / we update the window position right away
CORE . Window . position . x = CORE . Window . previousPosition . x ;
CORE . Window . position . y = CORE . Window . previousPosition . y ;
}
/ / Try to enable GPU V - Sync , so frames are limited to screen refresh rate ( 60 Hz - > 60 FPS )
@ -190,11 +195,11 @@ void ToggleFullscreen(void)
/ / Toggle borderless windowed mode
void ToggleBorderlessWindowed ( void )
{
/ / Leave fullscreen before attempting to set borderless windowed mode and get screen position from it
/ / Leave fullscreen before attempting to set borderless windowed mode
bool wasOnFullscreen = false ;
if ( CORE . Window . fullscreen )
{
n">CORE . Window . previousPosition = CORE . Window . position ;
o">/ / fullscreen already saves the previous position so it does not need to be set here again
ToggleFullscreen ( ) ;
wasOnFullscreen = true ;
}
@ -213,7 +218,7 @@ void ToggleBorderlessWindowed(void)
{
/ / Store screen position and size
/ / NOTE : If it was on fullscreen , screen position was already stored , so skip setting it here
if ( ! wasOnFullscreen ) glfwGetWindowPos ( platform . handle , & CORE. Window . previousPosition . x , & CORE . Window . previousP osition. y ) ;
if ( ! wasOnFullscreen ) CORE . Window . previousPosition = CORE . Window . position ;
CORE . Window . previousScreen = CORE . Window . screen ;
/ / Set undecorated and topmost modes and flags
@ -255,6 +260,9 @@ void ToggleBorderlessWindowed(void)
glfwFocusWindow ( platform . handle ) ;
CORE . Window . flags & = ~ FLAG_BORDERLESS_WINDOWED_MODE ;
CORE . Window . position . x = CORE . Window . previousPosition . x ;
CORE . Window . position . y = CORE . Window . previousPosition . y ;
}
}
else TRACELOG ( LOG_WARNING , " GLFW: Failed to find video mode for selected monitor " ) ;
@ -592,6 +600,9 @@ void SetWindowTitle(const char *title)
/ / Set window position on screen ( windowed mode )
void SetWindowPosition ( int x , int y )
{
/ / Update CORE . Window . position as well
CORE . Window . position . x = x ;
CORE . Window . position . y = y ;
glfwSetWindowPos ( platform . handle , x , y ) ;
}
@ -614,8 +625,9 @@ void SetWindowMonitor(int monitor)
{
TRACELOG ( LOG_INFO , " GLFW: Selected monitor: [%i] %s " , monitor , glfwGetMonitorName ( monitors [ monitor ] ) ) ;
const int screenWidth = CORE . Window . screen . width ;
const int screenHeight = CORE . Window . screen . height ;
/ / Here the render width has to be used again in case high dpi flag is enabled
const int screenWidth = CORE . Window . render . width ;
const int screenHeight = CORE . Window . render . height ;
int monitorWorkareaX = 0 ;
int monitorWorkareaY = 0 ;
int monitorWorkareaWidth = 0 ;
@ -1568,12 +1580,17 @@ int InitPlatform(void)
int monitorWidth = 0 ;
int monitorHeight = 0 ;
glfwGetMonitorWorkarea ( monitor , & monitorX , & monitorY , & monitorWidth , & monitorHeight ) ;
int posX = monitorX + ( monitorWidth - ( int ) CORE . Window . screen . width ) / 2 ;
int posY = monitorY + ( monitorHeight - ( int ) CORE . Window . screen . height ) / 2 ;
/ / 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 posY = monitorY + ( monitorHeight - ( int ) CORE . Window . render . height ) / 2 ;
if ( posX < monitorX ) posX = monitorX ;
if ( posY < monitorY ) posY = monitorY ;
SetWindowPosition ( posX , posY ) ;
/ / Update CORE . Window . position here so it is correct from the start
CORE . Window . position . x = posX ;
CORE . Window . position . y = posY ;
}
/ / Load OpenGL extensions
@ -1585,6 +1602,7 @@ int InitPlatform(void)
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Set window callback events
glfwSetWindowSizeCallback ( platform . handle , WindowSizeCallback ) ; / / NOTE : Resizing not allowed by default !
glfwSetWindowPosCallback ( platform . handle , WindowPosCallback ) ;
glfwSetWindowMaximizeCallback ( platform . handle , WindowMaximizeCallback ) ;
glfwSetWindowIconifyCallback ( platform . handle , WindowIconifyCallback ) ;
glfwSetWindowFocusCallback ( platform . handle , WindowFocusCallback ) ;
@ -1681,7 +1699,12 @@ static void WindowSizeCallback(GLFWwindow *window, int width, int height)
/ / NOTE : Postprocessing texture is not scaled to new size
}
static void WindowPosCallback ( GLFWwindow * window , int x , int y )
{
/ / Set current window position
CORE . Window . position . x = x ;
CORE . Window . position . y = y ;
}
static void WindowContentScaleCallback ( GLFWwindow * window , float scalex , float scaley )
{
CORE . Window . screenScale = MatrixScale ( scalex , scaley , 1.0f ) ;