mirror of
				https://github.com/raysan5/raylib.git
				synced 2025-11-04 01:34:19 +00:00 
			
		
		
		
	GetCurrentMonitor() - use closest monitor (#3472)
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							3afd0a55b9
						
					
				
				
					commit
					2db7c727b6
				
			@@ -751,15 +751,19 @@ int GetCurrentMonitor(void)
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            int x = 0;
 | 
			
		||||
            int y = 0;
 | 
			
		||||
            int closestDist = 0x7FFFFFFF;
 | 
			
		||||
 | 
			
		||||
            glfwGetWindowPos(platform.handle, &x, &y);
 | 
			
		||||
            x += (int)CORE.Window.screen.width / 2;
 | 
			
		||||
            y += (int)CORE.Window.screen.height / 2;
 | 
			
		||||
            // Window center position
 | 
			
		||||
            int wcx = 0;
 | 
			
		||||
            int wcy = 0;
 | 
			
		||||
 | 
			
		||||
            glfwGetWindowPos(platform.handle, &wcx, &wcy);
 | 
			
		||||
            wcx += (int)CORE.Window.screen.width / 2;
 | 
			
		||||
            wcy += (int)CORE.Window.screen.height / 2;
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < monitorCount; i++)
 | 
			
		||||
            {
 | 
			
		||||
                // Monitor top-left position
 | 
			
		||||
                int mx = 0;
 | 
			
		||||
                int my = 0;
 | 
			
		||||
 | 
			
		||||
@@ -769,17 +773,46 @@ int GetCurrentMonitor(void)
 | 
			
		||||
 | 
			
		||||
                if (mode)
 | 
			
		||||
                {
 | 
			
		||||
                    const int width = mode->width;
 | 
			
		||||
                    const int height = mode->height;
 | 
			
		||||
                    const int right = mx + mode->width - 1;
 | 
			
		||||
                    const int bottom = my + mode->height - 1;
 | 
			
		||||
 | 
			
		||||
                    if ((x >= mx) &&
 | 
			
		||||
                        (x < (mx + width)) &&
 | 
			
		||||
                        (y >= my) &&
 | 
			
		||||
                        (y < (my + height)))
 | 
			
		||||
                    if ((wcx >= mx) &&
 | 
			
		||||
                        (wcx <= right) &&
 | 
			
		||||
                        (wcy >= my) &&
 | 
			
		||||
                        (wcy <= bottom))
 | 
			
		||||
                    {
 | 
			
		||||
                        index = i;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    int xclosest = wcx;
 | 
			
		||||
                    if (wcx < mx)
 | 
			
		||||
                    {
 | 
			
		||||
                        xclosest = mx;
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (wcx > right)
 | 
			
		||||
                    {
 | 
			
		||||
                        xclosest = right;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    int yclosest = wcy;
 | 
			
		||||
                    if (wcy < my)
 | 
			
		||||
                    {
 | 
			
		||||
                        yclosest = my;
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (wcy > bottom)
 | 
			
		||||
                    {
 | 
			
		||||
                        yclosest = bottom;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    int dx = wcx - xclosest;
 | 
			
		||||
                    int dy = wcy - yclosest;
 | 
			
		||||
                    int dist = (dx * dx) + (dy * dy);
 | 
			
		||||
                    if (dist < closestDist)
 | 
			
		||||
                    {
 | 
			
		||||
                        index = i;
 | 
			
		||||
                        closestDist = dist;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else TRACELOG(LOG_WARNING, "GLFW: Failed to find video mode for selected monitor");
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user