Есть ли способ изменить частоту событий ConfigureNotify в X11?
У меня есть небольшая графическая программа, которая использует события ConfigureNotify, чтобы обнаружить изменение размера окна и перерисовать приложение. Тем не менее, при изменении размера окна изменения размера происходят, как представляется, несколько медленнее, что приводит к перерисовке рывка. Есть ли способ настроить эту частоту событий? Кроме этого, есть ли способ определить начало / конец изменения размера, чтобы я мог отложить перерисовку до достижения окончательного размера?
1 ответ
Нет, невозможно настроить частоту событий; они просто приходят, как считает X-сервер. Однако отчасти это может быть связано с тем, что вы обновляете окно сразу после события изменения размера (я надеюсь, что вы не делаете это в обработчике события...). Причина в том, что вы немедленно заставляете X-сервер работать с вашим рисование, давая ему мало времени, чтобы отправить события обратно.
Мое стандартное решение для такого рода поведения: при изменении размера используйте таймер для перекраски через равные промежутки времени (скажем, каждые 200 мс или около того). Используйте ширину и высоту как в начале процедуры рисования (помните, что вы можете получать события изменения размера во время рисования!). Если с момента последнего события таймера не произошло изменения ширины / высоты, остановите таймер.
Я предлагаю использовать инструментарий Xt для реализации таймеров и других обратных вызовов; это намного проще в использовании, чем обычные вызовы Xlib.