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