Glfw: Rappel de taille de cadre/fenêtre appelé deux fois sous Windows

Créé le 13 déc. 2019  ·  4Commentaires  ·  Source: glfw/glfw

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;
        }
Windows enhancement

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é ?

Tous les 4 commentaires

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).

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

voidburn picture voidburn  ·  4Commentaires

Tbwas picture Tbwas  ·  4Commentaires

elmindreda picture elmindreda  ·  4Commentaires

~
snbharath picture snbharath  ·  3Commentaires

Itanq picture Itanq  ·  5Commentaires