Используя GTK, я пытаюсь наложить подсказку «Дополнительно» (но это может быть любой объект рисования) в углу GtkTextView, содержащегося в GtkScrolledWindow. Я рисую подсказку в обработчике для сигнала expose текстового представления. Работает, но при прокрутке окна получаю артефакты: подсказка перемещается вместе с содержимым текстового представления и не стирается.
Чтобы избавиться от артефактов, я запускаю перерисовку после каждой прокрутки. В основном это работает, но вы все равно можете видеть, как подсказка прыгает вверх и вниз при быстрой прокрутке. Есть ли способ предотвратить это? Было бы неплохо, если бы приглашение просто «плавало» поверх текстового представления.
Я попытался заключить прокручиваемое окно в GtkEventBox и нарисовать подсказку поверх него, но это тоже не сработало; полосы прокрутки и текстовое представление всегда закрашивают подсказку, даже если вы устанавливаете окно окна события перед его дочерними окнами.
ОБНОВЛЕНИЕ
Если я соединяю обратный вызов expose GtkEventBox с g_signal_connect_after(), то он вызывается после обратных вызовов expose GtkScrolledWindow и GtkTextView. Тем не менее, текстовое представление по-прежнему отображается над полем события. Я думаю, это потому, что прокрутка происходит асинхронно. У кого-нибудь есть идеи, как я могу предотвратить перезапись моего рисунка?
ДРУГОЕ ОБНОВЛЕНИЕ
Итак, я думаю, что мне действительно нужен сигнал для подключения, когда асинхронная прокрутка завершена. Если я смогу узнать, когда это произошло, то я смогу инициировать другое событие разоблачения на GtkEventBox. Как я могу получить уведомление, когда прокрутка завершена?
GtkEventBoxexpose вызывается послеGtkScrolledWindow? Пара printf прояснит сомнения... - person ntd   schedule 20.04.2010