Made glfwGetPrimaryMonitor always return a handle.

Replaced the primary flag with the convention of putting the primary
monitor first in the returned array.
This commit is contained in:
Camilla Berglund 2013-02-17 19:09:22 +01:00
parent eb80266d89
commit 1961cecb7c
5 changed files with 35 additions and 33 deletions

View File

@ -244,6 +244,17 @@ _GLFWmonitor** _glfwPlatformGetMonitors(int* count)
free(displays); free(displays);
for (i = 0; i < monitorCount; i++)
{
if (CGDisplayIsMain(monitors[i]->ns.displayID))
{
_GLFWmonitor* temp = monitors[0];
monitors[0] = monitors[i];
monitors[i] = temp;
break;
}
}
*count = monitorCount; *count = monitorCount;
return monitors; return monitors;
} }

View File

@ -257,8 +257,6 @@ struct _GLFWmonitor
{ {
char* name; char* name;
GLboolean primary;
// Physical dimensions in millimeters. // Physical dimensions in millimeters.
int widthMM, heightMM; int widthMM, heightMM;
// Logical orientation of the screen on the desktop // Logical orientation of the screen on the desktop
@ -686,7 +684,6 @@ GLboolean _glfwIsValidContext(_GLFWwndconfig* wndconfig);
/*! @ingroup utility /*! @ingroup utility
*/ */
_GLFWmonitor* _glfwCreateMonitor(const char* name, _GLFWmonitor* _glfwCreateMonitor(const char* name,
GLboolean primary,
int widthMM, int heightMM, int widthMM, int heightMM,
int x, int y); int x, int y);

View File

@ -156,7 +156,6 @@ void _glfwInputMonitorChange(void)
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
_GLFWmonitor* _glfwCreateMonitor(const char* name, _GLFWmonitor* _glfwCreateMonitor(const char* name,
GLboolean primary,
int widthMM, int heightMM, int widthMM, int heightMM,
int x, int y) int x, int y)
{ {
@ -168,7 +167,6 @@ _GLFWmonitor* _glfwCreateMonitor(const char* name,
} }
monitor->name = strdup(name); monitor->name = strdup(name);
monitor->primary = primary;
monitor->widthMM = widthMM; monitor->widthMM = widthMM;
monitor->heightMM = heightMM; monitor->heightMM = heightMM;
monitor->positionX = x; monitor->positionX = x;
@ -280,31 +278,13 @@ GLFWAPI GLFWmonitor** glfwGetMonitors(int* count)
GLFWAPI GLFWmonitor* glfwGetPrimaryMonitor(void) GLFWAPI GLFWmonitor* glfwGetPrimaryMonitor(void)
{ {
int i;
_GLFWmonitor* primary = NULL;
if (!_glfwInitialized) if (!_glfwInitialized)
{ {
_glfwInputError(GLFW_NOT_INITIALIZED, NULL); _glfwInputError(GLFW_NOT_INITIALIZED, NULL);
return NULL; return NULL;
} }
for (i = 0; i < _glfw.monitorCount; i++) return (GLFWmonitor*) _glfw.monitors[0];
{
if (_glfw.monitors[i]->primary)
{
primary = _glfw.monitors[i];
break;
}
}
if (!primary)
{
_glfwInputError(GLFW_PLATFORM_ERROR, NULL);
return NULL;
}
return (GLFWmonitor*) primary;
} }
GLFWAPI void glfwGetMonitorPos(GLFWmonitor* handle, int* xpos, int* ypos) GLFWAPI void glfwGetMonitorPos(GLFWmonitor* handle, int* xpos, int* ypos)

View File

@ -102,6 +102,7 @@ _GLFWmonitor** _glfwPlatformGetMonitors(int* count)
int size = 0, found = 0; int size = 0, found = 0;
_GLFWmonitor** monitors = NULL; _GLFWmonitor** monitors = NULL;
DWORD adapterIndex = 0; DWORD adapterIndex = 0;
int primaryIndex = 0;
for (;;) for (;;)
{ {
@ -111,7 +112,6 @@ _GLFWmonitor** _glfwPlatformGetMonitors(int* count)
DEVMODE settings; DEVMODE settings;
char* name; char* name;
HDC dc; HDC dc;
GLboolean primary;
ZeroMemory(&adapter, sizeof(DISPLAY_DEVICE)); ZeroMemory(&adapter, sizeof(DISPLAY_DEVICE));
adapter.cb = sizeof(DISPLAY_DEVICE); adapter.cb = sizeof(DISPLAY_DEVICE);
@ -156,7 +156,8 @@ _GLFWmonitor** _glfwPlatformGetMonitors(int* count)
EnumDisplayDevices(adapter.DeviceName, 0, &display, 0); EnumDisplayDevices(adapter.DeviceName, 0, &display, 0);
dc = CreateDC(L"DISPLAY", display.DeviceString, NULL, NULL); dc = CreateDC(L"DISPLAY", display.DeviceString, NULL, NULL);
primary = adapter.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE; if (adapter.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE)
primaryIndex = found;
name = _glfwCreateUTF8FromWideString(display.DeviceString); name = _glfwCreateUTF8FromWideString(display.DeviceString);
if (!name) if (!name)
@ -165,7 +166,7 @@ _GLFWmonitor** _glfwPlatformGetMonitors(int* count)
return NULL; return NULL;
} }
monitors[found] = _glfwCreateMonitor(name, primary, monitors[found] = _glfwCreateMonitor(name,
GetDeviceCaps(dc, HORZSIZE), GetDeviceCaps(dc, HORZSIZE),
GetDeviceCaps(dc, VERTSIZE), GetDeviceCaps(dc, VERTSIZE),
settings.dmPosition.x, settings.dmPosition.x,
@ -184,6 +185,13 @@ _GLFWmonitor** _glfwPlatformGetMonitors(int* count)
found++; found++;
} }
if (primaryIndex > 0)
{
_GLFWmonitor* temp = monitors[0];
monitors[0] = monitors[primaryIndex];
monitors[primaryIndex] = temp;
}
*count = found; *count = found;
return monitors; return monitors;
} }

View File

@ -193,7 +193,6 @@ _GLFWmonitor** _glfwPlatformGetMonitors(int* found)
} }
monitors[*found] = _glfwCreateMonitor(oi->name, monitors[*found] = _glfwCreateMonitor(oi->name,
output == primary,
oi->mm_width, oi->mm_height, oi->mm_width, oi->mm_height,
ci->x, ci->y); ci->x, ci->y);
@ -207,6 +206,17 @@ _GLFWmonitor** _glfwPlatformGetMonitors(int* found)
} }
XRRFreeScreenResources(sr); XRRFreeScreenResources(sr);
for (i = 0; i < *found; i++)
{
if (monitors[i]->x11.output == primary)
{
_GLFWmonitor* temp = monitors[0];
monitors[0] = monitors[i];
monitors[i] = temp;
break;
}
}
} }
else else
{ {
@ -222,11 +232,7 @@ _GLFWmonitor** _glfwPlatformGetMonitors(int* found)
widthMM = DisplayWidthMM(_glfw.x11.display, _glfw.x11.screen); widthMM = DisplayWidthMM(_glfw.x11.display, _glfw.x11.screen);
heightMM = DisplayHeightMM(_glfw.x11.display, _glfw.x11.screen); heightMM = DisplayHeightMM(_glfw.x11.display, _glfw.x11.screen);
monitors[0] = _glfwCreateMonitor("Display", monitors[0] = _glfwCreateMonitor("Display", widthMM, heightMM, 0, 0);
GL_TRUE,
widthMM, heightMM,
0, 0);
*found = 1; *found = 1;
} }