Skip to content

Commit

Permalink
GetCurrentMonitor() - use closest monitor (raysan5#3472)
Browse files Browse the repository at this point in the history
  • Loading branch information
M374LX authored Oct 27, 2023
1 parent 3afd0a5 commit 2db7c72
Showing 1 changed file with 44 additions and 11 deletions.
55 changes: 44 additions & 11 deletions src/platforms/rcore_desktop.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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");
}
Expand Down

0 comments on commit 2db7c72

Please sign in to comment.