@ -1218,6 +1218,19 @@ void PollInputEvents(void)
/ / Module Internal Functions Definition
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
static void SetDimensionsFromMonitor ( GLFWmonitor * monitor )
{
const GLFWvidmode * mode = glfwGetVideoMode ( monitor ) ;
/ / Default display resolution to that of the current mode
CORE . Window . display . width = mode - > width ;
CORE . Window . display . height = mode - > height ;
/ / Set screen width / height to the display width / height if they are 0
if ( CORE . Window . screen . width = = 0 ) CORE . Window . screen . width = CORE . Window . display . width ;
if ( CORE . Window . screen . height = = 0 ) CORE . Window . screen . height = CORE . Window . display . height ;
}
/ / Initialize platform : graphics , inputs and more
int InitPlatform ( void )
{
@ -1358,26 +1371,22 @@ int InitPlatform(void)
/ / REF : https : / / github . com / raysan5 / raylib / issues / 1554
glfwSetJoystickCallback ( NULL ) ;
/ / Find monitor resolution
GLFWmonitor * monitor = glfwGetPrimaryMonitor ( ) ;
if ( ! monitor )
GLFWmonitor * monitor = NULL ;
if ( CORE . Window . fullscreen )
{
TRACELOG ( LOG_WARNING , " GLFW: Failed to get primary monitor " ) ;
return - 1 ;
}
/ / According to glfwCreateWindow ( ) , if the user does not have a choice , fullscreen applications
/ / should default to the primary monitor .
const GLFWvidmode * mode = glfwGetVideoMode ( monitor ) ;
CORE . Window . display . width = mode - > width ;
CORE . Window . display . height = mode - > height ;
monitor = glfwGetPrimaryMonitor ( ) ;
if ( ! monitor )
{
TRACELOG ( LOG_WARNING , " GLFW: Failed to get primary monitor " ) ;
return - 1 ;
}
/ / Set screen width / height to the display width / height if they are 0
if ( CORE . Window . screen . width = = 0 ) CORE . Window . screen . width = CORE . Window . display . width ;
if ( CORE . Window . screen . height = = 0 ) CORE . Window . screen . height = CORE . Window . display . height ;
SetDimensionsFromMonitor ( monitor ) ;
if ( CORE . Window . fullscreen )
{
/ / Remember center for switchinging 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 screen width / height equal to the display , we can ' t calculate the window pos for toggling full - screened / windowed .
@ -1396,7 +1405,7 @@ int InitPlatform(void)
/ / Obtain recommended CORE . Window . display . width / CORE . Window . display . height from a valid videomode for the monitor
int count = 0 ;
const GLFWvidmode * modes = glfwGetVideoModes ( glfwGetPri maryM onitor( ) , & count ) ;
const GLFWvidmode * modes = glfwGetVideoModes ( monitor , & count ) ;
/ / Get closest video mode to desired CORE . Window . screen . width / CORE . Window . screen . height
for ( int i = 0 ; i < count ; i + + )
@ -1426,21 +1435,55 @@ int InitPlatform(void)
/ / HighDPI monitors are properly considered in a following similar function : SetupViewport ( )
SetupFramebuffer ( CORE . Window . display . width , CORE . Window . display . height ) ;
platform . handle = glfwCreateWindow ( CORE . Window . display . width , CORE . Window . display . height , ( CORE . Window . title ! = 0 ) ? CORE . Window . title : " " , glfwGetPri maryM onitor( ) , NULL ) ;
platform . handle = glfwCreateWindow ( CORE . Window . display . width , CORE . Window . display . height , ( CORE . Window . title ! = 0 ) ? CORE . Window . title : " " , monitor , NULL ) ;
/ / NOTE : Full - screen change , not working properly . . .
/ / glfwSetWindowMonitor ( platform . handle , glfwGetPrimaryMonitor ( ) , 0 , 0 , CORE . Window . screen . width , CORE . Window . screen . height , GLFW_DONT_CARE ) ;
}
else
{
/ / If we are windowed fullscreen , ensures that window does not minimize when focus is lost
if ( ( CORE . Window . screen . height = = CORE . Window . display . height ) & & ( CORE . Window . screen . width = = CORE . Window . display . width ) )
/ / No - fullscreen window creation
bool wantWindowedFullscreen = ( CORE . Window . screen . height = = 0 ) & & ( CORE . Window . screen . width = = 0 ) ;
/ / If we are windowed fullscreen , ensures that window does not minimize when focus is lost .
/ / This hinting code will not work if the user already specified the correct monitor dimensions ;
/ / at this point we don ' t know the monitor ' s dimensions . ( Though , how did the user then ? )
if ( wantWindowedFullscreen )
{
glfwWindowHint ( GLFW_AUTO_ICONIFY , 0 ) ;
}
/ / No - fullscreen window creation
platform . handle = glfwCreateWindow ( CORE . Window . screen . width , CORE . Window . screen . height , ( CORE . Window . title ! = 0 ) ? CORE . Window . title : " " , NULL , NULL ) ;
/ / 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 creationHeight = CORE . Window . screen . height ! = 0 ? CORE . Window . screen . height : 1 ;
platform . handle = glfwCreateWindow ( creationWidth , creationHeight , ( CORE . Window . title ! = 0 ) ? CORE . Window . title : " " , NULL , NULL ) ;
/ / 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 monitorIndex = GetCurrentMonitor ( ) ;
GLFWmonitor * * monitors = glfwGetMonitors ( & monitorCount ) ;
if ( monitorIndex < monitorCount )
{
monitor = monitors [ monitorIndex ] ;
SetDimensionsFromMonitor ( monitor ) ;
TRACELOG ( LOG_INFO , " wantWindowed: %d, size: %dx%d " , wantWindowedFullscreen , CORE . Window . screen . width , CORE . Window . screen . height ) ;
if ( wantWindowedFullscreen )
{
glfwSetWindowSize ( platform . handle , CORE . Window . screen . width , CORE . Window . screen . height ) ;
}
}
else
{
/ / The monitor for the window - manager - created window can not be determined , so it can not be centered .
glfwTerminate ( ) ;
TRACELOG ( LOG_WARNING , " GLFW: Failed to determine Monitor to center Window " ) ;
return - 1 ;
}
if ( platform . handle )
{
@ -1524,8 +1567,8 @@ int InitPlatform(void)
int monitorHeight = 0 ;
glfwGetMonitorWorkarea ( monitor , & monitorX , & monitorY , & monitorWidth , & monitorHeight ) ;
int posX = monitorX + ( monitorWidth - CORE . Window . screen . width ) / 2 ;
int posY = monitorY + ( monitorHeight - CORE . Window . screen . height ) / 2 ;
int posX = monitorX + ( monitorWidth - p">( int ) CORE . Window . screen . width ) / 2 ;
int posY = monitorY + ( monitorHeight - p">( int ) CORE . Window . screen . height ) / 2 ;
if ( posX < monitorX ) posX = monitorX ;
if ( posY < monitorY ) posY = monitorY ;
SetWindowPosition ( posX , posY ) ;