Beispiel #1
0
void _glfwDestroyMonitors(_GLFWmonitor** monitors, int count)
{
    int i;

    for (i = 0;  i < count;  i++)
        _glfwDestroyMonitor(monitors[i]);

    free(monitors);
}
Beispiel #2
0
void _glfwInputMonitorChange(void)
{
    int i, j, monitorCount;
    _GLFWmonitor** monitors;

    monitors = _glfwPlatformGetMonitors(&monitorCount);

    for (i = 0;  i < monitorCount;  i++)
    {
        for (j = 0;  j < _glfw.monitorCount;  j++)
        {
            if (_glfw.monitors[j] == NULL)
                continue;

            if (strcmp(monitors[i]->name, _glfw.monitors[j]->name) == 0)
            {
                // This monitor was connected before, so re-use the existing
                // monitor object to preserve its address and user pointer

                // TODO: Transfer monitor properties

                _glfwDestroyMonitor(monitors[i]);
                monitors[i] = _glfw.monitors[j];
                _glfw.monitors[j] = NULL;
                break;
            }
        }

        if (j == _glfw.monitorCount)
        {
            // This monitor was not connected before
            _glfw.monitorCallback((GLFWmonitor*) monitors[i], GLFW_CONNECTED);
        }
    }

    for (i = 0;  i < _glfw.monitorCount;  i++)
    {
        _GLFWwindow* window;

        if (_glfw.monitors[i] == NULL)
            continue;

        // This monitor is no longer connected
        _glfw.monitorCallback((GLFWmonitor*) _glfw.monitors[i], GLFW_DISCONNECTED);

        for (window = _glfw.windowListHead;  window;  window = window->next)
        {
            if (window->monitor == _glfw.monitors[i])
                window->monitor = NULL;
        }
    }

    _glfwDestroyMonitors();

    _glfw.monitors = monitors;
    _glfw.monitorCount = monitorCount;
}
Beispiel #3
0
void _glfwDestroyMonitors(void)
{
    int i;

    for (i = 0;  i < _glfw.monitorCount;  i++)
        _glfwDestroyMonitor(_glfw.monitors[i]);

    free(_glfw.monitors);
    _glfw.monitors = NULL;
    _glfw.monitorCount = 0;
}
Beispiel #4
0
void _glfwInputMonitorChange(void)
{
    int i, j, monitorCount = _glfw.monitorCount;
    _GLFWmonitor** monitors = _glfw.monitors;

    _glfw.monitors = _glfwPlatformGetMonitors(&_glfw.monitorCount);

    // Re-use still connected monitor objects

    for (i = 0;  i < _glfw.monitorCount;  i++)
    {
        for (j = 0;  j < monitorCount;  j++)
        {
            if (_glfwPlatformIsSameMonitor(_glfw.monitors[i], monitors[j]))
            {
                _glfwDestroyMonitor(_glfw.monitors[i]);
                _glfw.monitors[i] = monitors[j];
                break;
            }
        }
    }

    // Find and report disconnected monitors (not in the new list)

    for (i = 0;  i < monitorCount;  i++)
    {
        _GLFWwindow* window;

        for (j = 0;  j < _glfw.monitorCount;  j++)
        {
            if (monitors[i] == _glfw.monitors[j])
                break;
        }

        if (j < _glfw.monitorCount)
            continue;

        for (window = _glfw.windowListHead;  window;  window = window->next)
        {
            if (window->monitor == monitors[i])
                window->monitor = NULL;
        }

        if (_glfw.monitorCallback)
            _glfw.monitorCallback((GLFWmonitor*) monitors[i], GLFW_DISCONNECTED);
    }

    // Find and report newly connected monitors (not in the old list)
    // Re-used monitor objects are then removed from the old list to avoid
    // having them destroyed at the end of this function

    for (i = 0;  i < _glfw.monitorCount;  i++)
    {
        for (j = 0;  j < monitorCount;  j++)
        {
            if (_glfw.monitors[i] == monitors[j])
            {
                monitors[j] = NULL;
                break;
            }
        }

        if (j < monitorCount)
            continue;

        if (_glfw.monitorCallback)
            _glfw.monitorCallback((GLFWmonitor*) _glfw.monitors[i], GLFW_CONNECTED);
    }

    _glfwDestroyMonitors(monitors, monitorCount);
}