Glfw: Panggilan balik ukuran bingkai/jendela dipanggil dua kali di Windows

Dibuat pada 13 Des 2019  ·  4Komentar  ·  Sumber: glfw/glfw

Saya perhatikan bahwa di port Windows GLFW3, _glfwInputFramebufferSize dan _glfwInputWindowSize dipanggil terlepas dari ukuran windows saat ini. Juga, lebar/tinggi jendela tidak disimpan dalam struktur win32 . Ini dapat menyebabkan panggilan berulang ke panggilan balik.

Saya sarankan untuk mengubah kode win32_window.c sebagai berikut.

        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

Komentar yang paling membantu

OK, saya melihat sekarang bahwa X11 menangani ini sejak a7ff236 dan Kakao - sejak 1fe319d (#1085).
Saya pikir Windows bisa menggunakan trik yang sama.

Apakah Anda memiliki skenario di mana acara ini dapat dipanggil ketika ukurannya tidak berubah?

Semua 4 komentar

Ini berpotensi memecahkan kode, seseorang mungkin mengandalkan perilaku ini.

Ini berpotensi memecahkan kode, seseorang mungkin mengandalkan perilaku ini.

Anda mungkin benar, tetapi karena struktur window menampilkan bidang lebar/tinggi dan bidang tersebut tidak diinisialisasi dalam port Windows, saya menduga ini hanya kesalahan (kecil).

OK, saya melihat sekarang bahwa X11 menangani ini sejak a7ff236 dan Kakao - sejak 1fe319d (#1085).
Saya pikir Windows bisa menggunakan trik yang sama.

Apakah Anda memiliki skenario di mana acara ini dapat dipanggil ketika ukurannya tidak berubah?

Ya. Faktanya, saya mengalami masalah dalam proyek saya di mana saya awalnya membuka jendela tersembunyi 1x1, kemudian mengubah ukurannya ke ukuran yang tepat (dihitung), dan akhirnya menampilkannya.

Dengan urutan operasi ini, setelah ukuran jendela ditetapkan, panggilan balik akan dipanggil dua kali (pertama kali setelah pengubahan ukuran, dan kedua kali saat menampilkannya).

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

Tbwas picture Tbwas  ·  4Komentar

GraemeWilde picture GraemeWilde  ·  3Komentar

ocornut picture ocornut  ·  3Komentar

dmitshur picture dmitshur  ·  4Komentar

elmindreda picture elmindreda  ·  4Komentar