
У меня есть область рисования внутри области просмотра внутри прокручиваемого окна. Изображение отображается нормально, когда область рисования помещается внутри прокручиваемого окна. Но когда я запрашиваю размер больше, чем прокручиваемое окно, то область рисования не всегда перерисовывается при прокрутке вверх или вниз, и то же самое происходит при изменении размера родительского окна. Происходит следующее: я получаю область нужного размера внутри прокручиваемого окна, но выглядит так, как будто внутри нет области рисования или как будто в области рисования ничего не нарисовано, что иногда мигает с правильным рисунком в случайных положениях полос прокрутки. Я подключил обратный вызов к сигналу рисования, который печатает «render» каждый раз, когда он вызывается, и другой обратный вызов к сигналу изменения значения настроек полос прокрутки, которые печатают «adj» на экране каждый раз, когда они прокручиваются. Вывод терминала следующий
adj
adj
adj
adj
adj
1428919598 render
adj
adj
adj
Итак, каждый раз, когда я вижу adj, холст выглядит пустым, в то время как он отрисовывается правильно, когда я вижу <...> render. Поэтому при быстрой прокрутке я получаю мерцающее изображение. Есть идеи, что может быть причиной этого?
решение1
Я портировал код из gtk2 в gtk3. Проблема оказалась в новом сигнале "draw", который теперь заменяет "expose-event". В старой версии мне приходилось создавать контекст в обработчике сигнала, но новый обратный вызов имеет его в качестве одного из аргументов, и именно его следует использовать.