Автоматическое определение размера GtkTextView в GtkScrolledWindow - PullRequest
7 голосов
/ 13 декабря 2011

Я работаю на gschem , бесплатном программном инструменте для редактирования схем электроники. Недавно мы столкнулись с проблемой при использовании GtkScrolledWindow , содержащей GtkTextView .

Контекст

В последних версиях Ubuntu используются наложенные полосы прокрутки, что означает, что GtkScrolledWindows больше не устанавливает минимальную высоту, которая обеспечивает достаточно места для устаревшей полосы прокрутки (фактически, они имеют минимальную высоту 0). Аналогично, GtkTextView без текста для отображения запрашивает высоту 0. Это означает, что один из прокручиваемых GtkTextViews в gschem отображался как один пиксель в высоту, и это, очевидно, неприменимо.

Screenshot showing broken

В диалоговом окне справа на снимке экрана, показанном выше, обратите внимание на невидимый виджет между надписью «Value:» и кнопкой «Добавить».

Об этом сообщают несколько пользователей независимо друг от друга - см. Также отчет об ошибке .

Вопрос

Очевидно, что это можно исправить, выполнив:

g_object_set (textview, "height-request", 100, NULL);

Тем не менее, это довольно не элегантно и сломается для пользователей, которые устанавливают очень большой размер шрифта в пикселях (например, пользователи с проблемами зрения или использующие экраны с высоким разрешением).

Поэтому в идеале мы хотим установить минимальный размер GtkTextView относительно размера шрифта по умолчанию, например, скажите это, чтобы «показать как минимум три строки текста».

Кто-нибудь может предложить разумный / элегантный подход для этого?

Ответы [ 4 ]

2 голосов
/ 20 декабря 2011

Просто отключите полосы прокрутки ubuntu в вашем приложении, выполнив:

putenv("LIBOVERLAY_SCROLLBAR=0");

Не идеально, но неплохо, пока не найдешь более долговременное решение. Либо просто подождите, пока Ubuntu не отключит оверлейные полосы прокрутки ...

0 голосов
/ 30 марта 2013

Аналогично, GtkTextView без текста для отображения запрашивает высоту 0.

Возможно, вы можете создать GtkTextView с некоторым текстом внутри.Как несколько пробелов и установить пустое значение после создания.

0 голосов
/ 11 февраля 2012

Должен ли это быть просмотр текста?Если вместо этого вы можете использовать блок событий, вы можете сделать из него поверхность Каира, визуализировать текст с помощью pango, а затем использовать pango_layout_get_size () для получения высоты текста.

0 голосов
/ 22 декабря 2011

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

...