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