Percebi que na porta Windows do GLFW3, _glfwInputFramebufferSize
e _glfwInputWindowSize
são chamados independentemente do tamanho atual das janelas. Além disso, a largura/altura da janela não é armazenada na estrutura win32
. Isso pode causar chamadas repetidas para o retorno de chamada.
Sugiro alterar o código win32_window.c
da seguinte forma.
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;
}
Isso potencialmente quebrará o código, alguém pode confiar nesse comportamento.
Isso potencialmente quebrará o código, alguém pode confiar nesse comportamento.
Você pode estar certo, mas como a estrutura window
apresenta os campos de largura/altura e eles não são inicializados na portabilidade do Windows, suspeito que isso tenha sido apenas um (pequeno) descuido.
OK, vejo agora que o X11 lida com isso desde a7ff236 e Cocoa - desde 1fe319d (#1085).
Acho que o Windows poderia usar o mesmo truque.
Você tem algum cenário em que esse evento possa ser chamado quando o tamanho não for alterado?
sim. Na verdade, eu estava encontrando o problema em um projeto meu em que inicialmente abri uma janela oculta 1x1, depois a redimensionei para um tamanho adequado (calculado) e finalmente a exibi.
Com esta seqüência de operações, após a definição do tamanho da janela, o callback seria chamado duas vezes (a primeira vez após o redimensionamento e a segunda vez ao exibi-la).
Comentários muito úteis
OK, vejo agora que o X11 lida com isso desde a7ff236 e Cocoa - desde 1fe319d (#1085).
Acho que o Windows poderia usar o mesmo truque.
Você tem algum cenário em que esse evento possa ser chamado quando o tamanho não for alterado?