Рисование на GtkScrolledWindow или GtkEventBox

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

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

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

ОБНОВЛЕНИЕ

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

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

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


person ptomato    schedule 17.04.2010    source источник
comment
Вы уверены, что ваш обратный вызов GtkEventBox expose вызывается после GtkScrolledWindow? Пара printf прояснит сомнения...   -  person ntd    schedule 20.04.2010
comment
Хорошая идея; Я проверил это. См. редактирование вопроса.   -  person ptomato    schedule 24.04.2010


Ответы (1)


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

person ergosys    schedule 02.05.2010
comment
Я думал об этом, но тогда, если вы переместите главное окно, всплывающее окно останется там, где оно есть. Любые идеи? - person ptomato; 03.05.2010
comment
У меня нет определенного ответа, но я бы попробовал подключиться к событию конфигурации для родителя или виджета textview. Также посмотрите на set_transient_for(). - person ergosys; 04.05.2010
comment
Звучит разумно, спасибо! Я все еще не уверен, что это идеальное решение, но опять же, это не то, что у меня есть сейчас ;-) - person ptomato; 05.05.2010