Поместится ли текст в GTK# TextView без полосы прокрутки

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

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

Я не хочу добавлять текст, если это означает, что для текстового представления потребуется вертикальная полоса прокрутки.

Как мне это сделать?


person trampster    schedule 30.06.2009    source источник


Ответы (1)


Я не знаю, как измерить содержимое TextView без фактического обновления текста. Это сложный виджет макета текста, который может обрабатывать форматированный текст, изображения и т. д. Вставка текста может существенно изменить макет, поэтому вы не можете «предсказать», как новый текст изменит размер без фактического изменения буфера и пересчета его макета. .

Было бы проще предложить решение, если бы вы объяснили, зачем вам нужен этот функционал.

Например, если вам просто нужно знать после добавления текста, будут ли в представлении полосы прокрутки, вы можете использовать настройки прокрутки — TextView является «прокручиваемым» виджетом, т. е. его пространство макета виртуализировано, и управляется родительским объектом ScrolledWindow через объекты «Adjustment», которые содержат диапазон, размер страницы, размер шага прокрутки и т. д. Вы можете определить, когда они изменяются, обратившись к ним из ScrolledWindow и подписавшись на их события изменения.

person Mikayla Hutchinson    schedule 30.06.2009
comment
Я не хочу добавлять текст, если это означает, что для текстового представления потребуется вертикальная полоса прокрутки. - person trampster; 01.07.2009
comment
Я думаю, вы могли бы добавить его, а затем удалить, если он вызывает полосу прокрутки. - person Mikayla Hutchinson; 01.07.2009
comment
Можно ли это сделать, не вызывая мерцания. Могу ли я отключить рисование на экране, чтобы пользователь не видел, как полоса прокрутки появляется, а затем исчезает. - person trampster; 01.07.2009
comment
AFAIK GTK не будет перерисовываться немедленно, поэтому, если вы немедленно удалите текст, полосы прокрутки могут не отображаться. Попробуйте и посмотрите. Другой трюк может состоять в том, чтобы полностью избежать использования ScrolledWindow. Я не уверен, что это возможно - вам наверняка придется подделывать некоторые вещи, например, передавать фиктивные настройки в TextView. Мне любопытно, для чего вы это используете. Если ваши требования к форматированию минимальны, вы можете написать собственный виджет метки, используя Pango напрямую (я сделал это сам). Таким образом, у вас будет абсолютный контроль над всем. - person Mikayla Hutchinson; 01.07.2009