Glfw: تم استدعاء رد الاتصال بحجم الإطار / النافذة مرتين على Windows

تم إنشاؤها على ١٣ ديسمبر ٢٠١٩  ·  4تعليقات  ·  مصدر: glfw/glfw

لقد لاحظت أنه في منفذ Windows GLFW3 ، يتم استدعاء _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;
        }
Windows enhancement

التعليق الأكثر فائدة

حسنًا ، أرى الآن أن X11 يتعامل مع هذا منذ a7ff236 و Cocoa - منذ 1fe319d (# 1085).
أعتقد أن Windows يمكنه استخدام نفس الحيلة.

هل لديك أي سيناريو حيث يمكن استدعاء هذا الحدث عندما لم يتغير الحجم؟

ال 4 كومينتر

من المحتمل أن يؤدي هذا إلى كسر الشفرة ، وقد يعتمد شخص ما على هذا السلوك.

من المحتمل أن يؤدي هذا إلى كسر الشفرة ، وقد يعتمد شخص ما على هذا السلوك.

قد تكون على صواب ، ولكن نظرًا لأن بنية window تتميز بحقول العرض / الارتفاع ولم يتم تهيئتها في Windows porting ، فأعتقد أن هذا كان مجرد إشراف (ثانوي).

حسنًا ، أرى الآن أن X11 يتعامل مع هذا منذ a7ff236 و Cocoa - منذ 1fe319d (# 1085).
أعتقد أن Windows يمكنه استخدام نفس الحيلة.

هل لديك أي سيناريو حيث يمكن استدعاء هذا الحدث عندما لم يتغير الحجم؟

نعم. في الواقع ، كنت أواجه المشكلة في مشروع خاص بي حيث فتحت في البداية نافذة مخفية 1 × 1 ، ثم قمت بتغيير حجمها إلى الحجم المناسب (المحسوب) ، وأخيراً عرضتها.

مع هذا التسلسل من العمليات ، بعد ضبط حجم النافذة ، سيتم استدعاء رد الاتصال مرتين (المرة الأولى بعد تغيير الحجم ، والمرة الثانية عند عرضها).

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات