J'ai remarqué que dans le port Windows de GLFW3, les _glfwInputFramebufferSize
et _glfwInputWindowSize
sont appelés quelle que soit la taille actuelle de la fenêtre. De plus, la largeur/hauteur de la fenêtre n'est pas stockée dans la structure win32
. Cela peut entraîner des appels répétés au rappel.
Je suggère de modifier le code win32_window.c
comme suit.
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;
}
Cela cassera potentiellement le code, quelqu'un peut se fier à ce comportement.
Cela cassera potentiellement le code, quelqu'un peut s'appuyer sur ce comportement.
Vous avez peut-être raison, mais comme la structure window
contient les champs largeur/hauteur et qu'ils ne sont pas initialisés dans le portage Windows, je soupçonne que ce n'était qu'un (mineur) oubli.
OK, je vois maintenant que X11 gère cela depuis a7ff236 et Cocoa - depuis 1fe319d (#1085).
Je pense que Windows pourrait utiliser la même astuce.
Avez-vous un scénario dans lequel cet événement pourrait être appelé lorsque la taille n'a pas changé ?
Oui. En fait, je rencontrais le problème dans un de mes projets où j'ouvrais initialement une fenêtre cachée 1x1, puis la redimensionnais à une taille appropriée (calculée), et enfin l'affichais.
Avec cette séquence d'opérations, une fois la taille de la fenêtre définie, le rappel serait appelé deux fois (la première fois après le redimensionnement et une seconde fois lors de son affichage).
Commentaire le plus utile
OK, je vois maintenant que X11 gère cela depuis a7ff236 et Cocoa - depuis 1fe319d (#1085).
Je pense que Windows pourrait utiliser la même astuce.
Avez-vous un scénario dans lequel cet événement pourrait être appelé lorsque la taille n'a pas changé ?