Я заметил, что в версии GLFW3 для Windows вызовы _glfwInputFramebufferSize
и _glfwInputWindowSize
вызываются независимо от текущего размера окна. Кроме того, ширина/высота окна не хранится в структуре win32
. Это может вызвать повторные вызовы обратного вызова.
Я предлагаю изменить код win32_window.c
следующим образом.
case WM_SIZE:
{
const GLFWbool iconified = wParam == SIZE_MINIMIZED;
const GLFWbool maximized = wParam == SIZE_MAXIMIZED ||
(window->win32.maximized &&
wParam != SIZE_RESTORED);
const int width = LOWORD(lParam);
const int height = HIWORD(lParam);
if (_glfw.win32.disabledCursorWindow == window)
updateClipRect(window);
if (window->win32.iconified != iconified)
_glfwInputWindowIconify(window, iconified);
if (window->win32.maximized != maximized)
_glfwInputWindowMaximize(window, maximized);
if (window->win32.width != width || window->win32.height != height) {
_glfwInputFramebufferSize(window, width, height);
_glfwInputWindowSize(window, width, height);
}
if (window->monitor && window->win32.iconified != iconified)
{
if (iconified)
releaseMonitor(window);
else
{
acquireMonitor(window);
fitToMonitor(window);
}
}
window->win32.iconified = iconified;
window->win32.maximized = maximized;
window->win32.width = width;
window->win32.height = height;
return 0;
}
Это потенциально сломает код, кто-то может полагаться на такое поведение.
Это потенциально сломает код, кто-то может полагаться на такое поведение.
Возможно, вы правы, но поскольку в структуре window
есть поля ширины/высоты, и они не инициализируются при портировании Windows, я подозреваю, что это была (незначительная) оплошность.
Хорошо, теперь я вижу, что X11 справляется с этим, начиная с a7ff236, а Cocoa - с 1fe319d (#1085).
Я думаю, что Windows может использовать тот же трюк.
Есть ли у вас сценарий, в котором это событие можно было бы вызвать, когда размер не изменился?
да. На самом деле, я столкнулся с проблемой в моем проекте, где я сначала открыл скрытое окно 1x1, затем изменил его размер до правильного (расчетного) размера и, наконец, отобразил его.
При такой последовательности операций после установки размера окна обратный вызов будет вызываться дважды (первый раз после изменения размера и второй раз при его отображении).
Самый полезный комментарий
Хорошо, теперь я вижу, что X11 справляется с этим, начиная с a7ff236, а Cocoa - с 1fe319d (#1085).
Я думаю, что Windows может использовать тот же трюк.
Есть ли у вас сценарий, в котором это событие можно было бы вызвать, когда размер не изменился?