Рисование в GtkScrolledWindow или GtkEventBox - PullRequest
4 голосов
/ 17 апреля 2010

Используя GTK, я пытаюсь наложить подсказку «Больше» (но это может быть и любой рисованный объект) в углу GtkTextView, содержащемся в GtkScrolledWindow. Я рисую подсказку в обработчике для сигнала expose текстового представления. Это работает, но когда я прокручиваю окно, я получаю артефакты: приглашение перемещается вместе с содержимым текстового представления и не стирается.

Чтобы избавиться от артефактов, я запускаю перерисовку после каждого свитка. Это в основном работает, но вы все равно можете видеть, что подсказка прыгает вверх и вниз при быстрой прокрутке. Есть ли способ предотвратить это? Было бы неплохо, если бы подсказка просто «всплыла» поверх текстового представления.

Я попытался заключить прокручиваемое окно в GtkEventBox и нарисовать подсказку поверх этого, но это тоже не сработало; полосы прокрутки и текстовое представление всегда закрашивают подсказку, даже если вы устанавливаете окно окна событий напротив своих дочерних окон.

UPDATE

Если я подключу обратный вызов GtkEventBox к g_signal_connect_after(), то он вызывается после обратных вызовов GtkScrolledWindow и GtkTextView. Текстовое представление все еще рисует по окну события все же. Я думаю, что это потому, что прокрутка происходит асинхронно. Кто-нибудь знает, как я могу предотвратить перезапись моего рисунка?

ДРУГОЕ ОБНОВЛЕНИЕ

Так что я думаю, что мне действительно нужен сигнал для подключения после завершения асинхронной прокрутки. Если я смогу узнать, когда это произойдет, тогда я могу вызвать другое событие expose на GtkEventBox. Как я могу получить уведомление о завершении прокрутки?

1 Ответ

1 голос
/ 03 мая 2010

Используйте всплывающее окно для подсказки. Это должно избежать всех проблем с прокруткой артефактов.

...